Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: оптимизация WHERE field != -1
Форумы портала PHP.SU » » Работа с СУБД » оптимизация WHERE field != -1

Страниц (1): [1]
 

1. Andrew73 - 22 Июля, 2011 - 09:26:17 - перейти к сообщению
Доброго времени суток.
Есть поле field tinyint(1)
В нем доступны значения
-1 0 1
выборка идет WHERE field != -1 но мне кажется что с точки зрения производительности, если стоит INDEX по этому полю, это не совсем хорошо.

Есть ли варианты, которые работают быстрее?
WHERE field=0 OR field=1
по сути должно быть быстрее (нашел 0 в индексе и больше не проверяем)
Но не уверен - посоветуйте, гуру.

Спасибо
2. EuGen - 22 Июля, 2011 - 10:14:22 - перейти к сообщению
А Вы поэкспериментируйте.
Используйте EXPLAIN SELECT ... для обоих вариантов и сравните результаты (которые будут очевидны)
3. Champion - 22 Июля, 2011 - 11:01:58 - перейти к сообщению
При != индекс используется почти никогда. При OR - зависит от селективности индекса. Индекс не будет использоваться, если не удастся по нему отсечь что-то около 30% результатов.Т.е. в случае field=0 OR field=1, если по статистике индекса оптимизатор запроса поймет что от вероятно отберет 30%, то использует. Если нет - то нет. Скорее всего по такому неселлективному полю не нужно даже создавать индекс, если он не нужен для поддержания FK.
4. EuGen - 22 Июля, 2011 - 12:41:29 - перейти к сообщению
есть еще IN

 

Powered by ExBB FM 1.0 RC1