12 июля 2006

1=1

Часто встречал, как в SQL-запросе в WHERE-клаузе пишут вот такую заглушку:

...
WHERE 1=1

А в мануле по MySQL-экзамену, который я сейчас читаю, чаще всего пишут так
...
WHERE 1

Помня о том, что MySQL умеет преобразовывать типы данных как ему надо, я подумал, что эти выражения не совсем эквивалентны, что может сказаться даже на скорости их выполнения.

Тогда я пустил отдельно два этих запроса:
SELECT BENCHMARK(1000000000, 1)
SELECT BENCHMARK(1000000000, 1=1)

Первый отработал за 19.19 сек, второй - 56.90

Потом я пошёл дальше и написал хранимку:
CREATE FUNCTION query_table(s INT) RETURNS INT
BEGIN
SELECT COUNT(*) INTO s FROM `translit2` WHERE 1;
RETURN s;
END

Эта функция отработала за 17 секунд (кол-во тестов пришлось уменьшить, чтобы не тормозило. Кстати, хорошая кликуха - Тормозило)
SELECT BENCHMARK(1000000, query_table(1) )

После внесения в код функции 1=1, она стала отрабатывать миллион пусков бенчмарком за 20 секунд.

Вот такие приколы. Ах, сколько ещё оптимизировать можно!

0 комментов:

Отправить комментарий