MySQL 5.0 индексирует нулевые значения? - PullRequest
12 голосов
/ 07 октября 2009

Я понимаю, что точный вопрос был задан ранее при переполнении стека с лишь неопределенно окончательным ответом: ссылка

Так вот и снова.

Таблица A: Имеет целочисленный столбец, который можно обнулять, вместе с индексом. Запрос:

SELECT * 
FROM table 
WHERE column IS NULL 
LIMIT 10;

Будет ли использоваться индекс или mysql выполнит полное сканирование таблицы, пока не найдет 10 записей?

Ответы [ 4 ]

7 голосов
/ 07 октября 2009

я думаю, что это должно быть полезно:

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

Поиск с использованием col_name IS NULL использует индексы, если col_name проиндексированы.

4 голосов
/ 07 октября 2009

Единственный способ узнать, что наверняка в вашем конкретном случае - это запустить «EXPLAIN SELECT» по вашему запросу.

Это действительно зависит от количества NULL в вашей таблице по сравнению с общим количеством строк; обновлялась ли статистика таблиц и т. д.

3 голосов
/ 07 октября 2009

Вам нужно проанализировать запрос. В целом, это зависит от относительного процента NULLs к значениям. Если большинство записей в этом целочисленном столбце равно NULL, оно, скорее всего, пропустит его.

С другой стороны, если только 10% (например) равны NULL, он будет (или должен) использовать индекс.

0 голосов
/ 20 мая 2011

Есть один простой способ узнать это.

Вы можете выполнить эту команду show index from tablename, и она вернет некоторые результаты анализа, один из которых называется NULL.

если NULL равно YES, ваш индекс содержит NULL

http://dev.mysql.com/doc/refman/5.1/en/show-index.html

...