(Обяснение на загубата на 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 - един в извлечената таблица, един в самия край.