2016-09-18 4 views
0

Я использую поле бит, которое может иметь только значение 1 или 0. Я хочу индексировать это поле. Строки, которые будут иметь значение, равное 1, будут, вероятно, менее 5% данных.Порядок сортировки для индексированного битового поля

Я уверен, что индекс должен быть отсортирован в порядке убывания или mySQL знает, какой способ пройти индекс для максимальной производительности?

PS: Я использую innoDB как двигатель.

ответ

0

Обычно не имеет смысла иметь индекс в столбце, который принимает только два значения. Причина? Наилучшим образом, главное преимущество индекса - ограничить количество прочитанных страниц данных для запроса. Однако, с двумя значениями, вероятно, что у каждой страницы данных будет какая-то запись с 0 и некоторой записью с 1. Следовательно, индекс не особенно полезен.

Существует два оговорки. Во-первых, двоичный (логический) столбец является разумным в индексе с несколькими столбцами. Это может быть важно, например, для выполнения условий where, которые относятся к столбцу.

Во-вторых, если индекс сгруппирован, то все 0 хранятся вместе, и все 1-е хранятся вместе. Затем - в близком приближении - только 5% строк нужно будет читать для обработки запросов, ограниченных более редким значением. Обратите внимание, однако, что это накладывает дополнительные накладные расходы на , обновляя значение, поскольку изменение значения означает фактическое удаление одной записи на странице данных и вставку другой записи на другую страницу.

Смежные вопросы