web-dev-qa-db-fra.com

Quoi de mieux: recherche de signets / clés ou balayage d'index

Je sais qu'un index chercher est meilleur qu'un index scanner, mais qui est préférable dans SQL Server expliquer les plans: recherche d'index ou recherche de clé (signet dans SQL Server 2000)?

Veuillez me dire qu'ils n'ont pas encore changé le nom pour SQL Server 2008 ...

45
OMG Ponies

Recherche d'index, à chaque fois.

Les recherches sont coûteuses, donc cela couvre les index et en particulier la clause INCLUDE a été ajoutée pour les améliorer.

En disant que si vous attendez exactement une ligne, par exemple, une recherche suivie d'une recherche peut être meilleure que d'essayer de couvrir une requête. Nous comptons sur cela pour éviter encore un autre indice dans certaines situations.

Modifier: article de discussion simple: tilisation des index de couverture pour améliorer les performances des requêtes

Edit, août 2012

Les recherches se produisent par ligne , c'est pourquoi elles évoluent mal. Finalement, l'optimiseur choisira un balayage d'index en cluster au lieu d'une recherche + recherche car il est plus efficace que de nombreuses recherches.

48
gbn

Recherche de clé est très similaire à une recherche d'index clusterisé (avant 2005 SP2 était nommé 'chercher avec recherche'). Je pense que la seule différence est que la recherche de clé peut spécifier un argument PRE-FETCH supplémentaire demandant au moteur d'exécution de pré-extraire plus de clés dans le cluster (c'est-à-dire faire une recherche d'index en cluster suivie d'un scan).

Voir une recherche de clé ne devrait pas vous faire peur. Est l'opérateur normal utilisé dans les boucles imbriquées et les boucles imbriquées est l'opérateur de jointure ordinaire. Si vous souhaitez améliorer un plan, essayez d'améliorer la jointure et voyez si elle peut utiliser une jointure de fusion à la place (c'est-à-dire que les deux côtés de la jointure peuvent fournir des lignes dans le même ordre de clé, la jointure la plus rapide) ou une jointure de hachage (en avoir assez mémoire pour que le QO considère une jointure de hachage, ou réduit la cardinalité en filtrant les lignes avant la jointure plutôt qu'après).

10
Remus Rusanu

Cette SO question mentionne que les recherches de clés sont quelque chose à éviter. Une recherche d'index va certainement être l'opération la plus performante.

2
Dustin Venegas