Оптимизирует ли СУБД размещение одинаковых строк?

Рейтинг: 2Ответов: 2Опубликовано: 28.02.2011

Возникла потребность в создании БД с таблицей вида атрибут:значение.

id:integerattribute:stringvalue:string
213"material""wood"
23"material""steel"

Где attribute -- что-то вроде enum, но используется строка. enum не используется потому что заранее не известны атрибуты.

Возникает вопрос, СУБД догадается не множить копии строк "material"? В данном случае интересует поведение MySQL, информация по другим СУБД приветствуется.

Можно конечно названия атрибутов вынести в отдельную таблицу, то почему-то кажется некрасивым (дополнительный шаг поиска). Я не прав?

Ответы

▲ 2Принят

В дополнительном справочнике нет ничего страшного. С другой стороны, если данных не очень много, то можно наплевать на дубликаты. Здесь важно определить баланс между целесообразностью, здравым смыслом и вечной оптимизацией.

Что же до MySQL, то тут трудно судить, я не специалист по её внутренностям, но можно предположить, что она это не делает, так как это означает, что ей самой надо создавать неявно эту дополнительную таблицу, а чтобы сделать это, надо точно обладать сведениями о том, насколько вероятна повторяемость данных, а такими сведениями она не располагает. Так что наиболее вероятный ответ: нет, она не делает никакой упаковки данных.

▲ 1

Oracle 7 и выше поддерживает битовые индексы. Они специально предназначены для оптимизации запросов по колонкам с небольшим количеством разных значений.