MYSQL IN или несколько условий - PullRequest
1 голос
/ 13 октября 2009

У меня есть простой запрос, который возвращает записи на основе поля status, не имеющего определенных значений. Допустим, ради аргументов, что поле может иметь значения 1,2,3 ... 10, и я хочу вернуть все записи, которые не имеют значений 3, 7 и 9. Что из следующего лучше всего использовать? 1002 *

Вариант 1.

SELECT `id` FROM `tbl` WHERE (`status` != '3' AND `status` != '7' AND `_status` != '9')

Вариант 2.

SELECT `id` FROM `tbl` WHERE `status` NOT IN ('3','7','9');

Спасибо за помощь.

Ответы [ 2 ]

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

Я подозреваю, что оптимизатор свел бы оба запроса к одной и той же вещи, и если это так, я бы предпочел второй вариант, так как он короче и, следовательно, легче разбирается.

Вы должны попытаться запустить EXPLAIN для каждого запроса с реальными данными для подтверждения.

1 голос
/ 14 октября 2009

Лучший способ оптимизировать ваш запрос с помощью команды EXPLAIN для примера

ОБЪЯСНИТЬ ВЫБОР id ОТ tbl ГДЕ status НЕ ВХОДИТ ('3', '7', '9'); и посмотреть время исполнения

...