2017-06-08 3 views
2

Ma question est de savoir si ce qui suit est fiable sur un grand ensemble de données MSSQL:Select est top x fiable sur les grands ensembles de données MSSQL

select top 1 * from table order by row_id 

Je me demandais s'il y avait un certain seuil que lorsqu'ils se sont rencontrés retournera le top 1 d'un ensemble de données. Par exemple, s'il y avait une table avec des millions de lignes et que la requête ci-dessus était exécutée si elle était fiable, la ligne retournée serait en effet la ligne du haut ou si elle serait la première ligne d'un sous-ensemble de ces données.

+0

Il sera en effet le top 1 ligne à partir des données qui est renvoyée. –

+0

Il ne retournera en tout cas que 1 ligne s'il a des enregistrements –

+1

Vous devriez consulter [cette réponse] (https://dba.stackexchange.com/a/171443/95107) à partir d'une autre question ... spécifiquement que vous [ doit utiliser l'ordre pour que votre requête soit déterministe] (https://blogs.msdn.microsoft.com/conor_cunningham_msft/2008/08/27/no-seatbelt-expecting-order-without-order-by/) fait qui fera en sorte que vous obtiendrez la rangée «TOP 1» basée sur votre «ORDER BY», peu importe s'il y a 2 enregistrements ou 2 millions. – scsimon

Répondre

2

Tant qu'il existe une clause «order by», elle est cohérente et fiable.

+0

C'est ce que je pensais merci pour la clarification – Maxqueue

0

Vous pouvez contrôler en fonction des variables comme ci-dessous:

declare @i int = 1 
select top(@i) * from NumSeq order by col1 

variables BasedOn @i il retournera le nombre d'enregistrements

+1

Information intéressante, mais il ne répond pas à la question du PO du tout. – hatchet