Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql:как да запазя ORDER BY след LEFT JOIN без пренареждане?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Достатъчен ли е Markdown (с strip_tags) за спиране на XSS атаки?

  2. MySQL MAX_JOIN_SIZE грешки

  3. PHP многоизмерен масив от mysql резултат

  4. Заместител на функцията UUID версия 1 на MySQL?

  5. Най-добрият начин да съхранявате работното време и да го запитвате ефективно