¿Por qué se trata de una exploración de índice y no una búsqueda de índice?
Aquí está la consulta:
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
Índices de ubicación:
PK_Locations:
LocationId
IX_Locations_CountryId_Type:
CountryId, escriba
ndices @LocationCache:
PK_LocationCache:
LocationId
IX_LocationCache_LocationId_SearchQuery_SearchRank:
LocationId, SearchQuery, SearchRank
Plan de ejecución
Así que está haciendo unIndex Seek en ubicaciones, utilizando el índice de cobertura, genial.
Pero por qué está haciendo unIndex Scan en el índice de cobertura de LocationCache?
El índice de cobertura tiene LocationId, SearchQuery, SearchRank en el índice (no como "columnas incluidas").
Hover en el escaneo del índice:
Esta consulta debe ir en una vista indizada servida por un catálogo de SQL Server FTS, consumida por un complemento de autocompletado, por lo que debe estar 100% optimizada.
En el momento en que la consulta anterior tarda 3 segundos. Debería ser <0.
¿Algunas ideas