Вот онлайн-демонстрация, демонстрирующая, что порядок условий предложения WHERE может иметь значение из-за короткого замыкания:
http://rextester.com/HJGN96158
Это выполняетсяследующие запросы:
-- query #1
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
-- query #2
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;
Единственное различие между ними заключается в порядке операндов в условии OR
.
myslowfunction
сознательно спит секунду и имеет побочный эффект:добавление записи в таблицу журнала каждый раз, когда она запускается.Вот результаты того, что записывается при выполнении двух вышеупомянутых запросов:
myslowfunction called for query #1 with value 1
myslowfunction called for query #1 with value 2
myslowfunction called for query #2 with value 1
myslowfunction called for query #2 with value 2
myslowfunction called for query #2 with value 3
myslowfunction called for query #2 with value 4
Выше показано, что медленная функция выполняется больше раз, когда она появляется слева от условия OR
, когдадругой операнд не всегда верен.
Итак, IMO ответ на вопрос:
Влияет ли порядок условий в предложении WHERE на производительность MySQL?
- это «Иногда это возможно».