Quelles sont Couvrant les Index et les Couverts Requêtes dans SQL Server?
Pouvez-vous expliquer les concepts de, et la relation entre l', Couvrant les Index et les Couverts Requêtes dans SQL Server de Microsoft?
Vous devez vous connecter pour publier un commentaire.
Un index de couverture est celui qui peut satisfaire toutes les demandes de colonnes dans une requête sans effectuer une nouvelle recherche dans l'index cluster.
Il n'y a pas une telle chose comme une requête de couverture.
Jetez un oeil à cette Simple-Parler de l'article: À l'aide de la couverture des Index pour Améliorer les Performances des Requêtes.
id, name, shop_id, price
. Si vous index surshop_id, price
, alors vous couvrir la requête qui calcule la moyenne des prix des produits de la boutique X, mais vous n'avez pas à couvrir la requête qui récupère les noms de ces produits, puisquename
ne fait pas partie de l'indice.Si toutes les colonnes demandé dans le
select
liste de requête, sont disponible dans l'index, puis le moteur de requête n'a pas à la recherche de la table, ce qui peut augmenter de manière significative les performances de la requête. Depuis toutes les colonnes demandées sont disponibles dans l'index, l'index est couvrant la requête. Ainsi, la requête est appelée une requête de couverture et de l'index est un index de couverture.D'un index cluster peut toujours couvrir une requête, si les colonnes dans la liste de sélection sont de la même table.
Les liens suivants peuvent vous être utiles, si vous êtes nouveau à l'index des concepts:
les requêtes et les index.
Un Index de couverture est un
Non-Clustered
index. Cluster et les index Non Cluster utilisation de B-Arbre de structure de données pour améliorer la recherche de données, la différence est que dans les feuilles d'un Index Cluster un album entier (c'est à dire la ligne) est stocké physiquement là!, mais ce n'est pas le cas pour les index Non Cluster. Les exemples suivants illustrent cela:Exemple: j'ai un tableau avec trois colonnes: ID, Fname et Lname.
Cependant, pour un index Non-Cluster, il y a deux possibilités: soit la table a déjà un index Cluster ou ça ne marche pas:
Que les deux diagrammes montrent, par exemple les index Non Cluster n'est pas une bonne performance, car ils ne peuvent pas trouver le favori de la valeur (c'est à dire Lname) uniquement à partir du B-Arbre. Au lieu de cela ils ont à faire un extra Rechercher l'étape (Clé ou DÉBARRASSER rechercher) pour trouver la valeur de Lname. Et, c'est là couvert de l'indice s'agit de l'écran. Ici, l'index Non Cluster ID coveres la valeur de Lname juste à côté d'elle dans les feuilles de l'Arbre-B et il n'est pas nécessaire pour tout type de look plus.
Un requête couverte est une requête où toutes les colonnes dans la requête l'ensemble de résultats sont tirés à partir des index non-cluster.
Une requête dans une requête couverte par la judicieuse disposition des indices.
Une requête couverte est souvent plus performant qu'un non-requête couverte en partie parce que les index non cluster ont plus de lignes par page index en cluster ou d'un segment d'index, donc moins de pages doivent être mis en mémoire dans l'ordre pour satisfaire à la requête. Ils ont plus de lignes par page, parce que seule une partie de la ligne de la table fait partie de la ligne d'index.
Un index de couverture est un indice qui est utilisé dans une requête couverte. Il n'y a pas une telle chose comme un indice de ce qui, en soi, est un index de couverture. Un index peut être un index de couverture à l'égard d'Une requête, alors que dans le même temps, n'étant pas un index de couverture à l'égard de la requête B.
LIMIT 1
requête ne bénéficient pas de la couverture d'optimisation? Dans la plupart des cas, l'accaparement d'un seul enregistrement aura besoin que d'une seule page de lecture (en ignorant bord-cas comme des hors-la page d'entreposage ou de très grande tables). Même avec un non-couvert de la requête.Voici un article dans devx.com qui dit:
Je ne peux que supposer qu'un requête couverte est une requête qui a un indice qui couvre toutes les colonnes dans son jeu d'enregistrements retourné. Une mise en garde - l'index et la requête doit être construit de manière à permettre le serveur SQL en fait l'inférer à partir de la requête que l'index est utile.
Par exemple, une jointure d'une table sur elle-même pourrait ne pas bénéficier d'un tel indice (en fonction de l'intelligence de la requête SQL exécution planner):
Supposons il y a un indice sur
PersonID,ParentID,Name
- ce serait un index de couverture pour une requête comme:Mais une requête comme ceci:
Ne serait probablement pas benifit tellement, même si toutes les colonnes sont dans l'index. Pourquoi? Parce que vous n'êtes pas vraiment dire que vous souhaitez utiliser le triple de l'indice de
PersonID,ParentID,Name
.Au lieu de cela, vous êtes la construction d'un état basé sur deux colonnes -
PersonID
etParentID
(qui laisseName
) et puis vous allez avoir tous les records, avec les colonnesPersonID, Name
. En fait, en fonction de la mise en œuvre, l'indice pourrait aider la dernière partie. Mais pour la première partie, vous êtes mieux d'avoir d'autres indices.Une requête de couverture est l'endroit où tous les prédicats peuvent être appariés en utilisant les indices sur les tables sous-jacentes.
C'est la première étape vers l'amélioration de la performance du sql à l'examen.
un index de couverture est celle qui donne à chaque colonne requise et dans lequel SQL server n'ont pas hop retour à l'index cluster de trouver n'importe quelle colonne. Ceci est réalisé à l'aide d'index non cluster et l'aide d'INCLURE la possibilité de couvrir les colonnes.
Non colonnes de clé peut uniquement être inclus dans les index non cluster. Les colonnes ne peuvent pas être définis à la fois dans la colonne de clé et la liste d'inclusion. Les noms de colonnes ne peuvent pas être répétées dans la liste d'inclusion. Non colonnes de clé peuvent être déposés à partir d'une table seulement après le non-index de la clé est d'abord supprimé. Veuillez voir les détails ici
Quand je rappelle simplement qu'un Index Cluster est constitué d'une clé-commandé non-tas liste de TOUTES les colonnes dans la table, les lumières se sont pour moi. Le mot "cluster", puis, se réfère au fait qu'il est un "cluster" de toutes les colonnes, comme une grappe de poissons dans ce "hot spot". Si il n'y a pas d'index couvrant la colonne contenant la recherché de la valeur (sur le côté droit de l'équation), puis le plan d'exécution utilise un Index Cluster Chercher dans l'Index Cluster est la représentation de la colonne demandée car il ne trouve pas la colonne demandée dans tous les autres la "couverture" de l'index. Le manque sera la cause d'un Index Cluster opérateur de recherche dans le projet de Plan d'Exécution, où l'cherché valeur dans une colonne à l'intérieur de la liste ordonnée représenté par l'Index Cluster.
Donc, la seule solution est de créer un index non-cluster qui a la colonne contenant la valeur requise à l'intérieur de l'index. De cette façon, il n'y a pas besoin de la référence de l'Index Cluster, et l'Optimiseur doit être en mesure de brancher cet indice dans le Plan d'Exécution n'y a aucune indication. Si, toutefois, il est un Prédicat de dénomination de la seule colonne de clé de clustering et d'un argument à une valeur scalaire sur la clé de cluster, le Cluster de recherche d'Index de l'Opérateur sera toujours utilisé, même s'il existe déjà un index de couverture sur une deuxième colonne de la table sans index.