(Обяснение на загубата на ORDER BYs
)
Стандартът на SQL по същество казва, че подзаявката е неподреден набор от редове. Това означава, че оптимизаторът е свободен да игнорира ORDER BYs
в таблицата „получени“:FROM ( SELECT ... ORDER BY )
. В "последните" версии на MySQL и MariaDB, като ORDER BYs
отпадат. Има и други случаи, когато ORDER BYs
се игнорира.
В някои ситуации (не съм сигурен за тази), добавяне на LIMIT 99999999
(голямо число) след ORDER BYs
подмамва оптимизатора да изпълни ORDER BYs
. Въпреки това все още е свободно да игнорирате „поръчката“ по-късно.
Общо правило за MySQL:Избягвайте подзаявки. (Има случаи, когато подзаявките са по-бързи, но не и вашите.)
Силно правило:трябва има ORDER BYs
на най-външния, ако искате резултатите да бъдат сортирани.
Ако сте добавили LIMIT 3
до извлечената таблица в първата ви заявка, ще получите само ЧАРЛС, ДЕЙВИД, ДЖЕЙМС, но не непременно в този ред . Тоест ще ви трябват две ORDER BYs
- един в извлечената таблица, един в самия край.