SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.07.2011 10:31:05

Andrew73
Участник
Зарегистрирован: 22.07.2011
Сообщений: 5

оптимизация WHERE field != -1

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

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

Спасибо

Неактивен

 

#2 22.07.2011 11:03:08

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: оптимизация WHERE field != -1

С использованием индекса теоретически оптимальным должен быть вариант WHERE field > -1, но на практике выборка скорее всего будет быстрее без использования индекса. Для индексов с таким низким cardinality чаще всего выгоднее обойти всю таблицу последовательно, чем обойти 2/3 таблицы, но перескакивая по дереву.

Неактивен

 

#3 29.08.2011 12:15:44

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: оптимизация WHERE field != -1

Примерно та же ситуация, поэтому напишу здесь.
Поле "flag" INT может принимать 0,1,2
выбираем либо (0,1) либо (1,2)
Как лучше:
flag IN (0,1)
flag <> 2
flag < 2
flag = 0 OR flag = 1

будет ли влиять на произв. изменения типа поля на SET?

Неактивен

 

#4 29.08.2011 16:05:29

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: оптимизация WHERE field != -1

Все варианты одинаково плохи, IN и «=» чуть-чуть получше (в случае, когда
0 и 1, например, по 5% количества строк — сможет использовать индекс).

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson