97 votes

Forfaits SQL Server: différence entre analyse d'index et recherche d'index

Dans un plan d'exécution SQL Server, quelle est la différence entre une analyse d'index et une recherche d'index

Je suis sur SQL Server 2005.

145voto

Justin Points 42106

Une analyse d'index est où SQL server lit l'ensemble de l'indice à la recherche pour les matchs - le temps que cela prend est proportionnelle à la taille de l'index.

Un index de recherche est là que SQL server utilise le b-arbre de structure de l'indice de rechercher directement les enregistrements correspondants (voir http://mattfleming.com/node/192 pour avoir une idée sur la façon dont cela fonctionne) - temps de prise est seulement proportionnelle au nombre d'enregistrements correspondants.

  • En général, un index de recherche est préférable à une analyse d'index (lorsque le nombre d'enregistrements correspondants est proprtionally beaucoup plus faible que le nombre total d'enregistrements), que le temps pris pour effectuer une recherche d'index est constant quel que soit le toal nombre d'enregistrements dans une table.
  • À noter toutefois que, dans certaines situations, une analyse d'index peut être plus rapide qu'une recherche d'index (parfois nettement plus rapide) - habituellement, lorsque la table est très faible, ou quand un grand pourcentage des dossiers de match le prédicat.

82voto

John Sansom Points 20087

La règle de base à suivre est les Scans sont mauvais, Cherche sont bonnes.

Analyse D'Index

Lorsque SQL Server effectue un scan, il charge l'objet dont on veut lire à partir du disque dans la mémoire, puis se lit à travers cet objet à partir du haut vers le bas à la recherche pour les dossiers dont il a besoin.

Recherche D'Index

Lorsque SQL Server effectue une recherche, il sait où dans l'index que les données vont être, de sorte qu'il des charges jusqu'à l'index à partir de la disquette, va directement à la partie de l'indice dont il a besoin et se lit à l'endroit où les données dont elle a besoin se termine. C'est obsouly un doit assurer un fonctionnement plus efficace qu'une analyse, que SQL sait déjà où les données, c'est qu'il est à la recherche pour.


Comment puis-je modifier un Plan d'Exécution à utiliser une recherche au lieu d'une Analyse?

Lorsque SQL Server est à la recherche de vos données probablement l'une des plus grandes choses qui feront de SQL Server switch à partir d'une recherche pour un scan, c'est quand certaines colonnes sont ce que vous cherchez ne sont pas inclus dans l'index que vous souhaitez utiliser. Le plus souvent cela aura SQL Server revenir à faire une analyse d'index cluster, depuis l'index Cluster contient toutes les colonnes dans la table. C'est l'une des principales raisons (à mon avis du moins) que nous avons maintenant la possibilité d'INCLURE des colonnes dans un index, sans ajout de ces colonnes pour les colonnes indexées de l'index. En incluant les colonnes supplémentaires dans l'index, nous avons augmentation de la taille de l'index, mais nous permettre de SQL Server pour lire l'index, sans avoir togo retour à l'index cluster, ou à la table elle-même pour obtenir ces valeurs.

Références

Pour plus d'informations concernant les spécificités de chacun de ces opérateurs au sein d'un Serveur SQL plan d'Exécution de voir....

4voto

AdaTheDev Points 53358

Avec une analyse d'index, toutes les lignes de l'index sont analysées pour rechercher une ligne correspondante. Cela peut être efficace pour les petites tables. Avec une recherche d'index, il suffit de toucher les lignes qui répondent réellement aux critères, ce qui la rend généralement plus performante.

2voto

kevchadders Points 5819

Une analyse d'index se produit lorsque la définition d'index ne peut pas trouver sur une seule ligne pour satisfaire les prédicats de recherche. Dans ce cas, SQL Server doit numériser plusieurs pages pour trouver une plage de lignes correspondant aux prédicats de recherche.

Dans le cas d'une recherche d'index, SQL Server recherche une seule ligne correspondant aux prédicats de recherche à l'aide de la définition d' index .

Les recherches d'index sont meilleures et plus efficaces.

1voto

AutomatedTester Points 14713

Une analyse touche chaque ligne de la table, même si c'est ce que vous recherchez ou non.

Une analyse ne regarde que les lignes qui correspondent à ce que vous recherchez.

Il est toujours préférable d'avoir des recherches plutôt que des analyses car elles sont plus efficaces dans l'apparence des données.

Une bonne explication peut être trouvée ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X