Modification de l'optimisation des requêtes MySQL/MariaDB : Trier par dans les sous-requêtes
Lors d'une requête avec MySQL 5.5 ou version antérieure, la clause ORDER BY d'une sous-requête a été appliquée avant le SELECT de la requête la plus externe. Cependant, dans MariaDB 10.0.14, ce comportement a changé et les clauses ORDER BY des sous-requêtes sont désormais ignorées lorsqu'aucune LIMIT n'est présente.
Pour résoudre ce problème, MariaDB recommande d'appliquer la clause ORDER BY à la requête la plus externe ou d'utiliser LIMIT dans la sous-requête.
Documenté Behavior
La documentation de MariaDB indique que les sous-requêtes de la clause FROM sont des ensembles de lignes non ordonnés et que les clauses ORDER BY sont généralement ignorées dans ce contexte. La citation suivante de la documentation fournit plus de détails :
"Une "table" (et une sous-requête dans la clause FROM également) est - selon la norme SQL - un ensemble non ordonné de lignes. Les lignes d'une table (ou dans une sous-requête de la clause FROM) n'apparaissent pas dans un ordre spécifique. C'est pourquoi l'optimiseur peut ignorer la clause ORDER BY que vous avez spécifiée. En fait, le standard SQL n'autorise même pas l'apparition de la clause ORDER BY dans celle-ci. sous-requête (nous l'autorisons, car ORDER BY ... LIMIT ... modifie le résultat, l'ensemble des lignes, pas seulement leur ordre)."
Par conséquent, il est suggéré de traiter les sous-requêtes comme des ensembles non ordonnés et pour placer des clauses ORDER BY dans les requêtes les plus externes ou utiliser LIMIT si nécessaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!