comment SÉLECTIONNER les œuvres, lorsqu'aucune commande n'est spécifiée?

La la documentation msdn dit que lorsque nous écrire

SELECT TOP(N) ..... ORDER BY [COLUMN]

Nous obtenons top(n) lignes sont triées par column (asc ou desc en fonction de ce que nous choisissons)

Mais si l'on ne spécifie pas toute ordonnance, msdn dit random comme Gail Erickson souligné ici. Comme il le souligne, il devrait être unspecified plutôt random. Mais comme
Thomas Lee
points qui

Quand l'écran est utilisé en conjonction avec la clause ORDER BY, le résultat
jeu est limitée à la première N nombre de lignes ordonnées; sinon, il
retourne les N premières lignes aléatoire

Donc, j'ai couru à cette requête sur une table qui n'ont pas des indices, j'ai d'abord couru ce..

SELECT *
FROM
    sys.objects so
WHERE
    so.object_id NOT IN (SELECT si.object_id
                         FROM
                             sys.index_columns si)
    AND so.type_desc = N'USER_TABLE'

Et ensuite dans l'une de ces tables, (en fait j'ai essayé la requête ci-dessous, dans tous les tableaux retournés par la requête ci-dessus) et j'ai toujours eu les mêmes lignes.

SELECT TOP (2) *
FROM
    MstConfigSettings

Ce retourne toujours le même 2 lignes, et le même est vrai pour tous les autres tableaux retournés par la requête 1. Maintenant, les plans d'exécution montre 3 étapes..

comment SÉLECTIONNER les œuvres, lorsqu'aucune commande n'est spécifiée?

Comme vous pouvez le voir il n'y a pas d'indice de regarder vers le haut, c'est juste une pure analyse de la table, et

comment SÉLECTIONNER les œuvres, lorsqu'aucune commande n'est spécifiée?

La Top montre que les pas de lignes à 2, et ainsi de la Table Scan; ce Qui n'est pas le cas (là, j'ai beaucoup de lignes).

Mais quand je lance quelque chose comme

SELECT TOP (2) *
FROM
    MstConfigSettings
ORDER BY
    DefaultItemId

Le plan d'exécution montre

comment SÉLECTIONNER les œuvres, lorsqu'aucune commande n'est spécifiée?

et

comment SÉLECTIONNER les œuvres, lorsqu'aucune commande n'est spécifiée?

Donc, quand je ne suis pas d'appliquer ORDER BY les étapes sont différentes (il n'y a pas de tri). Mais la question est de savoir comment cette TOP fonctionne quand il n'y a pas de Sort et pourquoi et comment il toujours donne le même résultat?

  • Je pensais que c'était juste commandé par la date à laquelle ils ont été ajoutés dans la base de données? Les plus anciens en premier.
  • il dépend du sgbd mise en œuvre, de sorte 'top' sans 'order by' est définie par l'implémentation de la fonctionnalité
  • TOP n'est pas le standard SQL et de toute façon la question est balisé de SQL Server.
InformationsquelleAutor Razort4x | 2013-03-06