Оптимизирует ли SQL UNION с LIMIT ненужные запросы?

Допустим, у меня есть последовательность запросов, которые постепенно становятся дороже. Я могу объединить все это в союз, но меня интересуют только 10 лучших результатов, поэтому я добавляю ОГРАНИЧЕНИЕ. Запрос выглядит примерно так:

(SELECT col1, col2 FROM table WHERE colx = 'x')
UNION
(SELECT col1, col2 FROM table WHERE colx LIKE '%x%')
UNION
(SELECT col1, col2 FROM table WHERE colx LIKE '%x%' AND unindexedcol LIKE '%y%')
LIMIT 10

Я знаю, что не гарантируется попадание в первую десятку по первому запросу, поскольку в документации MySQL указано

UNION по умолчанию создает неупорядоченный набор строк

, но на практике кажется, что результаты упорядочены: выберите 1, затем выберите 2 и т. д., пока не будет достигнут предел.

Итак, MySQL выполняет запросы последовательно и останавливается, когда достигает предела? Если нет, то как лучше всего выполнить этот стиль запроса, когда требуется только подмножество результатов и предпочтение отдается менее затратным запросам для минимизации времени выполнения?

5
задан Dolbz 11 February 2011 в 10:06
поделиться