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.
Réponses:
Une analyse d'index est l'endroit où le serveur SQL lit l'intégralité de l'index à la recherche de correspondances - le temps que cela prend est proportionnel à la taille de l'index.
Une recherche d'index est l'endroit où le serveur SQL utilise la structure b-tree de l'index pour rechercher directement les enregistrements correspondants (voir http://mattfleming.com/node/192 pour une idée de la façon dont cela fonctionne) - le temps nécessaire n'est que proportionnel à le nombre d'enregistrements correspondants.
La règle de base à suivre est que les scans sont mauvais, les recherches sont bonnes.
Balayage d'index
Lorsque SQL Server effectue une analyse, il charge l'objet qu'il souhaite lire à partir du disque dans la mémoire, puis lit cet objet de haut en bas à la recherche des enregistrements dont il a besoin.
Recherche d'index
Lorsque SQL Server effectue une recherche, il sait où dans l'index les données vont se trouver, donc il charge l'index à partir du disque, va directement à la partie de l'index dont il a besoin et lit où se terminent les données dont il a besoin. . C'est évidemment une opération beaucoup plus efficace qu'une analyse, car SQL sait déjà où se trouvent les données qu'il recherche.
Comment puis-je modifier un plan d'exécution pour utiliser une recherche au lieu d'une analyse?
Lorsque SQL Server recherche vos données, l'une des choses les plus importantes qui fera basculer SQL Server d'une recherche à une analyse est lorsque certaines des colonnes que vous recherchez ne sont pas incluses dans l'index que vous souhaitez qu'il utilise. Le plus souvent, cela obligera SQL Server à effectuer une analyse d'index clusterisé, car l'index clusterisé contient toutes les colonnes de la table. C'est l'une des principales raisons (à mon avis du moins) pour laquelle nous avons maintenant la possibilité d'inclure des colonnes dans un index, sans ajouter ces colonnes aux colonnes indexées de l'index. En incluant les colonnes supplémentaires dans l'index, nous augmentons la taille de l'index, mais nous permettons à SQL Server de lire l'index, sans avoir à revenir à l'index clusterisé ou à la table elle-même pour obtenir ces valeurs.
Références
Pour plus d'informations sur les spécificités de chacun de ces opérateurs dans un plan d'exécution SQL Server, voir ....
Avec une analyse d'index, toutes les lignes de l'index sont analysées pour trouver 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 et est donc généralement plus performant
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 analyser plusieurs pages pour trouver une plage de lignes répondant 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.
Un scan touche chaque ligne du tableau, même si c'est ce que vous recherchez ou non
Une recherche ne regarde que les lignes que vous recherchez.
Les recherches sont toujours meilleures que les analyses car elles sont plus efficaces dans la façon dont les données sont consultées.
Une bonne explication peut être trouvée ici