Здесь запрос:
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
Индексы местоположения:
PK_Locations:
LocationId
IX_Locations_CountryId_Type:
CountryId, Тип
LocationCache Indexes:
PK_LocationCache:
LocationId
IX_LocationCache_LocationId_SearchQuery_SearchRank:
LocationId, SearchQuery, SearchRank
План выполнения:
Таким образом, он делает Index Seek на местах, используя индекс покрытия, cool.
Но почему он делает Index Scan в индексе LocationCache, охватывающем индекс?
Этот индекс покрытия содержит LocationId, SearchQuery, SearchRank в индексе (не как "Включенные столбцы" ).
Наведите указатель на индексное сканирование:
Этот запрос должен идти в индексированном представлении, обслуживаемом каталогом FTS SQL Server, потребляемым плагином автозаполнения, поэтому он должен быть оптимизирован на 100%.
В тот момент, когда запрос выше 3 секунд. Он должен быть < 0.
Любые идеи?