web-dev-qa-db-fra.com

Existe-t-il une différence de performance entre "Set RowCount" et "TOP"?

J'ai besoin de sélectionner des lots de n rangées dans une grande table.

Je sais de deux façons de faire ceci:

  1. SET ROWCOUNT

    SET ROWCOUNT ####
    SELECT something FROM table WHERE clauses
    SET ROWCOUNT 0 -- rowcount is only needed for the one query above.
    
  2. TOP

     SELECT TOP ### something FROM table WHERE clauses
    

Existe-t-il une différence de performance (ou une autre raison de choisir un sur un autre) entre les deux solutions?

Notes:

  • Si cela importe, Sybase ASE est la version 15.
  • La requête est une seule déclaration SELECT. La limite ne s'appliquera à aucune autre déclaration (SO - (motifs habituels à choisir RowCount Over TOP Ne pas appliquer).
  • L'ordre des rangées n'a pas d'importance

Recherche effectuée :

  • Ceci SO Q & A a accepté la réponse qui ne revendique aucune différence sans références de soutien; et une autre réponse qui montre une éventuelle différence non mesurée pour MS SQL Server (que je ne suis pas sûr de s'appliquer à Sybase car la référence est de Microsoft).
2
DVK
SET ROWCOUNT ####
SELECT something FROM table WHERE clauses
SET ROWCOUNT 0 -- 

Dans cette requête, Optimizer n'inclut pas "SET ROWCOUNT #### "Partie dans le plan de requête donc aucun coût.

Il est rarement utilisé et il n'ya pas beaucoup de raison d'utiliser car nous ne sommes pas en mesure de spécifier des critères.

SELECT TOP ### something FROM table WHERE clauses

Généralement TOP est accompagné de order clause mais pas nécessaire.

TOP est donc évalué le plan de requête.

donc, ensemble RowCount fonctionnera peu mieux.

Différence principale

Top travail uniquement sur la requête qu'elle est utilisée.

SET ROWCOUNT Travailler pour la portée actuelle.Ille pour toutes les requêtes sont affectées par SET ROWCOUNT Dans cette périmètre, y compris la gâchette.

Supposons que

SET RowCount 2

et en fait (par logique) 4 lignes doivent être affectés dans la gâchette .Mais seulement 2 rangées seront affectées à cause de RowCount 2

Donc, il n'est pas sûr d'utiliser ensemble RowCount.

J'ai entendu SET ROWCOUNT sera amorti dans la prochaine version.

0
KumarHarsh