Considérer qu'un index dans SQL - et l'index est vraiment une partie de la mémoire de pointer les autres morceaux de la mémoire (c'est à dire des pointeurs vers des lignes). L'index est divisé en pages de sorte que des parties de l'index peut être chargé et déchargé de la mémoire en fonction de l'utilisation.
Lorsque vous demandez un ensemble de lignes, SQL utilise l'index pour trouver les lignes plus rapidement que le tableau de numérisation (en regardant chaque ligne).
SQL cluster et les index non cluster. Ma compréhension de l'index cluster est qu'ils grouper des valeurs de l'indice sur la même page. De cette façon, lorsque vous demandez toutes les lignes correspondant à une valeur d'index, SQL pouvez le retour de ces lignes à partir d'un cluster de page de mémoire. C'est pourquoi, en essayant de cluster de l'indice de colonne GUID est une mauvaise idée - vous n'essayez pas de cluster de valeurs aléatoires.
Lors de l'indexation d'une colonne de type integer, SQL index contient un ensemble de lignes pour chaque valeur de l'indice. Si vous avez une plage de 1 à 10, alors que vous auriez 10 index des pointeurs. En fonction du nombre de lignes il y a de cela peut être contacté différemment. Si votre requête de recherche de l'index matching "1", et puis d'où le Nom contient "Fred" (en supposant que le Nom de colonne n'est pas indexé), SQL obtient l'ensemble des lignes correspondant à "1" très rapidement, puis les analyses de la table pour trouver le reste.
Donc, ce que SQL est vraiment en train de faire est d'essayer de réduire l'ensemble de travail (nombre de lignes), il a à parcourir.
Lors de l'indexation d'un champ de bits (ou une gamme étroite), vous seulement de réduire le travail défini par le nombre de lignes correspondant à cette valeur. Si vous avez un petit nombre de lignes correspondant elle permettrait de réduire votre jeu de travail beaucoup. Pour un grand nombre de lignes à 50/50 de distribution, il peut vous acheter très peu de gain de performance vs en gardant l'index à jour.
La raison tout le monde dit d'essai est parce que SQL contient un très intelligents et complexes d'optimisation qui peut ignorer un indice s'il décide de la table de balayage est plus rapide, ou peut utiliser un tri, ou peuvent organiser des pages de mémoire cependant, il sacrément bien aime.