2009-11-26 6 views
3

Je souhaite comprendre la fonctionnalité d'index filtré SQL Server 2008.Index filtrés SQL Server 2008

Comment le moteur de base de données gère-t-il ce concept? Et comment cela va-t-il m'aider à obtenir des résultats plus rapides que les index standards lors de l'interrogation de grandes tables?

Quelqu'un peut-il m'aider à ce sujet?

Merci.

Répondre

8

C'est la clause WHERE de votre index.

mon vrai projet de vie pour un million de table rangée:

  • je besoin d'un index sur une colonne dans une table, mais 90% des valeurs sont NULL. J'ai besoin de l'index pour les 10% non-null, mais l'index est gonflé avec 90% de NULL. J'ajoute donc un filtre et économise de l'espace.

  • Je veux unique la même colonne (éq unique sur la valeur NON-null seulement). Avant SQL Server 2008, j'ai dû utiliser une vue indexée ou du code. Maintenant, le "WHERE" me permet d'imposer unique via l'index

3

La façon la plus simple de conceptualiser l'index filtré est un index avec une contrainte qui n'autorise que certaines valeurs dans l'index.

Si votre requête demande des valeurs qui tombent toutes dans la contrainte, le moteur sait qu'il peut utiliser l'index filtré au lieu de revenir à un autre index/table sous-jacente. Si vous demandez des valeurs en dehors de la contrainte, l'index filtré ne sera pas utilisé.

En termes de rapidité d'exécution de votre système, l'index peut être très ciblé et occuper globalement moins de pages qu'un indice NC équivalent sur les mêmes valeurs. cela vous donne essentiellement moins d'E/S et entraîne une augmentation de la vitesse. Même index recherchant l'index filtré, vous êtes plus susceptible d'obtenir un cache de page pour l'index, puisque l'index filtré n'inclut que les lignes qui vous intéressent (en théorie) en raison de la contrainte. Si vos distributions de données et requêtes ne suivent pas les schémas d'utilisation définis, il sera plus difficile de les faire fonctionner pour vous, mais dans les scénarios où vous avez beaucoup de valeurs nulles qui ne vous intéressent pas, alors l'index filtré peut être mis en place pour inclure uniquement des valeurs non nulles par exemple.