Индексирует ли MySQL значения NULL?

У меня есть таблица MySQL, где индексированный столбец INT будет равен 0 для 90% строк. Если я изменю эти строки на использование NULL вместо 0, будут ли они исключены из индекса, что сделает индекс примерно на 90% меньше?

Ответы

Ответ 1

http://dev.mysql.com/doc/refman/5.0/en/is-null-optimization.html

  MySQL может выполнить ту же оптимизацию для col_name IS NULL, что и для col_name = constant_value. Например, MySQL может использовать индексы и диапазоны для поиска NULL с помощью IS NULL.

Ответ 2

Похоже, он тоже индексирует NULL.

Будьте осторожны при запуске этого, потому что MySQL заблокирует таблицу для WRITES во время создания индекса. Построение индекса может занять некоторое время для больших таблиц, даже если столбец пуст (все нули).

Ссылочная.

Ответ 3

Если столбец имеет значение null, он добавит байт в требования к хранилищу столбца. Это приведет к увеличению индекса, что, вероятно, не очень хорошо. Тем не менее, если многие ваши запросы изменены для использования "IS NULL" или "NOT NULL", они могут быть быстрее, чем сравнение значений.

Моя кишка скажет мне, что это не null, но есть один ответ: test!

Ответ 4

Нет, он будет продолжать включать их, но не делайте слишком много предположений о том, каковы последствия в любом случае. Многое зависит от диапазона других значений (google для "мощности" ).

MSSQL имеет новый тип индекса, называемый "фильтрованным индексом" для этого типа ситуации (т.е. включает записи в индекс на основе фильтра). Системы типа dBASE имели аналогичную возможность, и это было очень удобно.

Ответ 5

Каждый индекс имеет мощность, означающую, сколько индексов индексируется. AFAIK это не разумная идея сказать, что индексы повторяют одно и то же значение для многих строк, но индекс будет ссылаться только на повторное значение на кластеризованный индекс многих строк (строки, имеющие нулевое значение для этого поля) и сохраняя ссылочный идентификатор кластерного индекса означает: каждая строка с индексированным полем с нулевым значением имеет размер, равный размеру PK (по этой причине эксперты рекомендуют иметь разумный размер PK, если у вас есть составной PK).