Допустим, у меня есть последовательность запросов, которые постепенно становятся дороже. Я могу объединить все это в союз, но меня интересуют только 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 выполняет запросы последовательно и останавливается, когда достигает предела? Если нет, то как лучше всего выполнить этот стиль запроса, когда требуется только подмножество результатов и предпочтение отдается менее затратным запросам для минимизации времени выполнения?