Qu'est-ce que une Recherche de Signet dans Sql Server?
Je suis en train d'essayer d'optimiser une requête qui recherche les données historiques. Je suis à l'aide de l'analyseur de requêtes pour la recherche de l'Exécution du Plan et ont constaté que la majorité de ma requête coût est quelque chose qui s'appelle une "Recherche de Signet". Je n'ai jamais vu ce nœud dans un plan d'exécution avant et ne sais pas ce que cela signifie.
Est-ce une bonne chose ou une mauvaise chose dans une requête?
Vous devez vous connecter pour publier un commentaire.
Un signet de recherche est le processus de trouver les données dans la table SQL, basé sur une inscription trouvée dans un index non-cluster.
Lors de votre recherche d'une valeur dans un index non-cluster, et que votre requête a besoin de plus de champs que la partie de l'indice du nœud feuille (tous les champs d'index, plus tout possible INCLURE des colonnes), puis le Serveur SQL doit aller récupérer les données réelles de page(s) - c'est ce qu'on appelle une recherche de signet.
Dans certains cas, c'est vraiment la seule façon d'aller - seulement si votre requête ne nécessiterait qu'un champ plus (pas tout un tas de 'em), il pourrait être une bonne idée d'INCLURE ce champ dans l'index non cluster. Dans ce cas, la feuille nœud de niveau de l'index non cluster devrait contenir tous les champs nécessaires pour satisfaire à votre requête (une "couverture" de l'index), et donc une recherche de signet ne serait pas plus nécessaire.
Marc
C'est un
NESTED LOOP
qui rejoint un index non-cluster avec la table elle-même sur un pointeur de ligne.Qui se passe pour les requêtes comme ceci:
si vous avez un index sur
col2
.L'index sur
col2
contient des pointeurs vers les lignes indexées.Afin de récupérer la valeur de
col1
, le moteur a besoin pour analyser l'index surcol2
pour les valeurs de clé de1
à10
, et pour chacune des feuilles de l'index, reportez-vous à la table elle-même en utilisant le pointeur contenu dans la feuille, pour connaître la valeur decol1
.Cet article souligne qu'une
Bookmark Lookup
estSQL Server 2000
s'terme, qui est remplacé parNESTED LOOP
's entre l'index et de la tableSQL Server 2005
et au-dessus deDe MSDN concernant les Recherches Signet: