Pourquoi est-ce un Indice de Scan et pas une recherche d'Index?

Voici la requête:

SELECT      top 100 a.LocationId, b.SearchQuery, b.SearchRank
FROM        dbo.Locations a
INNER JOIN  dbo.LocationCache b ON a.LocationId = b.LocationId
WHERE       a.CountryId = 2
AND         a.Type = 7

Emplacement D'Index:

PK_Locations:

LocationId

IX_Locations_CountryId_Type:

CountryId, Type

LocationCache Index:

PK_LocationCache:

LocationId

IX_LocationCache_LocationId_Searchquery_searchrank:

LocationId, SearchQuery, SearchRank

Plan D'Exécution:

Pourquoi est-ce un Indice de Scan et pas une recherche d'Index?

Donc, c'est de faire un de recherche d'Index sur les Lieux, à l'aide de l'index de couverture, c'est cool.

Mais pourquoi il est en train de faire un Index Scan sur le LocationCache index de couverture?

Que l'index de couverture a LocationId, SearchQuery, SearchRank dans l'index (et non comme des "colonnes Incluses").

Passez la souris sur l'analyse d'index:

Pourquoi est-ce un Indice de Scan et pas une recherche d'Index?

Cette requête doit aller dans une vue indexée servi par un Serveur SQL server FTS catalogue, consommé par une saisie semi-automatique du plugin, il se doit donc d'être à 100% optimisé.

Au moment de la requête ci-dessus est à prendre 3 secondes. Il convient de < 0.

Des idées?

Probablement pas lié, mais je suis curieux, pourquoi ne pas avoir une ordonnance par tout en utilisant top 100
De l'intérêt (mais ne vise pas à être un correctif de toute sorte) modification de l' INNER JOIN à INNER LOOP JOIN accélérer ou ralentir?
A - qu'est ce qu'une JOINTURE de BOUCLE? Que fait l'instant, et se tourna de l'Analyse d'Index dans une recherche d'Index!
INNER JOIN feuilles de la cueillette de la stratégie de jointure (BOUCLE, de FUSION, de HACHAGE) jusqu'à l'optimiseur, qui sera un choix fait sur la base des statistiques sur les table(s).
Au moins à l'emplacement de la cache mais je vous recommande les deux tables. Le SGBD doit réaliser le bon nombre de lignes à faire la jointure. Je suppose parce qu'il ne pensait qu'à 1420, il fait une mauvaise décision sur le type de rejoindre il doit utiliser. Rejoignez conseils peuvent être utiles, mais elles peuvent devenir échéant, au fil du temps. Si les stats est correctement mise à jour de sql server doit toujours choisir le meilleur plan.

OriginalL'auteur RPM1984 | 2011-06-30