Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

L'ordre d'une instruction SQL Select sans clause Order By

Non, ce comportement ne peut pas être invoqué. L'ordre est déterminé par la façon dont le planificateur de requêtes a décidé de construire l'ensemble de résultats. des requêtes simples comme select * from foo_table sont susceptibles d'être renvoyés dans l'ordre dans lequel ils sont stockés sur le disque, qui peut être dans l'ordre de la clé primaire ou dans l'ordre dans lequel ils ont été créés, ou dans un autre ordre aléatoire. requêtes plus complexes, telles que select * from foo where bar < 10 peut à la place être renvoyé dans l'ordre d'une colonne différente, en fonction d'une lecture d'index, ou selon l'ordre de la table, pour un parcours de table. des requêtes encore plus élaborées, avec plusieurs where conditions, group by clauses, union s, sera dans l'ordre que le planificateur décide qu'il est le plus efficace de générer.

L'ordre peut même changer entre deux requêtes identiques simplement à cause des données qui ont changé entre ces requêtes. une clause "where" peut être satisfaite d'un parcours d'index dans une requête, mais des insertions ultérieures pourraient rendre cette condition moins sélective, et le planificateur pourrait décider d'effectuer une requête ultérieure en utilisant un parcours de table.

Pour mettre un point plus fin là-dessus. Les systèmes RDBMS ont pour mandat de vous donner exactement ce que vous avez demandé, aussi efficacement que possible. Cette efficacité peut prendre plusieurs formes, y compris la minimisation des E/S (à la fois sur le disque et sur le réseau pour vous envoyer des données), la minimisation du processeur et la réduction de la taille de son ensemble de travail (en utilisant des méthodes qui nécessitent un stockage temporaire minimal).

sans ORDER BY clause, vous n'aurez pas demandé exactement pour une commande particulière, et ainsi le RDBMS vous donnera ces lignes dans un ordre qui correspond (peut-être) à un aspect coïncident de la requête, en fonction de l'algorithme que le RDBMS s'attend à produire les données le plus rapidement.

Si vous vous souciez de l'efficacité, mais pas de la commande, ignorez le ORDER BY clause. Si vous vous souciez de la commande mais pas de l'efficacité, utilisez le ORDER BY clause.

Puisque vous vous souciez réellement des DEUX utilisez ORDER BY puis ajustez soigneusement votre requête et votre base de données pour qu'elles soient efficaces.