Question

Nos sites sont de plus en plus bombardés, nous allons donc nous pencher sur l'optimisation de certaines de nos requêtes existantes.

Tout en regardant cela, nous avons rencontré plusieurs requêtes dont le plan d'exécution était environ 4 à 5 fois plus rapide lorsqu'une simple référence de l'index en cluster est dans la requête ... par exemple

S'il s'agissait de l'ancienne requête:

SELECT ...
FROM myTable
WHERE categoryID =  @category 

la requête suivante serait 4 fois plus rapide selon le plan d'exécution dans SSMS:

SELECT ...
FROM myTable
WHERE categoryID =  @category 
AND lotID = lotID

Nous n'arrivons pas à comprendre comment cela rendrait la requête plus rapide. L'index en cluster est sur lotID mais depuis, il fait une comparaison avec lui-même. Comment cela aide-t-il?

Était-ce utile?

La solution

me semble assez évident

votre première requête n'est pas couverte par l'index clusterisé alors que la seconde l'est puisque lotID n'est pas dans la clause WHERE de la première requête

Vous voudrez peut-être lire index couvrant SQL Server pour voir comment tout cela fonctionne

vous devez également comprendre qu'un index en cluster EST les données, toutes les données d'une table se trouvent dans l'index en cluster. Lorsque vous créez un index non clusterisé sur une table comportant un index clusterisé, l'index non clusterisé aura un pointeur sur l'index clusterisé (car c'est là que se trouve le reste des données), sauf si vous pouvez satisfaire votre requête complètement par le non clusteré. index et dans ce cas, seul l'index non clusterisé sera utilisé ... Je vais arrêter de me balader maintenant

EDIT

J'ai lu AND lotID = @lotID NOT AND lotID = lotID

Parfois, vous pouvez simuler un index clusterisé en faisant où lotID> 0 (en sélectionnant le nombre le plus bas que vous avez) et vous obtiendrez une recherche

Donc, si votre plus petit lotID = 1 et que vous ajoutez AND lotID > 0

vous pouvez également voir une recherche au lieu d'un scan, je montre WHERE IndexValue > '' dans cet article Une recherche d'index est-elle toujours meilleure ou plus rapide qu'une analyse d'index?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top