Lequel vient en premier lorsque MySQL traite la requête?
Un exemple:
SELECT pageRegions
FROM pageRegions WHERE(pageID=?) AND(published=true) AND (publishedOn<=?)
ORDER BY publishedON DESC
LIMIT 1';
Est-ce que cela retournera la dernière pageRegion publiée même si l'enregistrement ne correspond pas à la date/heure de révision SI LIMIT est appliqué après ORDER BY?
Oui, c'est après la commande. Pour votre requête, vous obtiendrez l'enregistrement avec la valeur publiée la plus élevée, car vous commandez DESC
, ce qui donne la plus grande valeur en premier dans le jeu de résultats, dont vous choisissez la première.
limit
est toujours appliqué à la fin de la collecte des résultats, donc après order by
.
Compte tenu de toutes vos clauses, l'ordre de traitement sera
Ainsi, vous obtiendrez l'enregistrement le plus proche <= publishedOn correspondant à toutes les conditions de la clause WHERE.
Je voulais juste souligner le cas où la commande MySQL est appliquée avant de limiter les résultats. Mais ce n'est pas vrai pour les autres DB.
Par exemple, Oracle limite d'abord les résultats et applique un ordre sur ces résultats. Cela a du sens lorsque vous y pensez du point de vue des performances. Dans MySQL, vous commandez en fait la base de données entière (> 1000 enregistrements) pour obtenir 2