Вот запрос:
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, Type
Индексы LocationCache:
PK_LocationCache:
LocationId
IX_LocationCache_LocationId_SearchQuery_SearchRank:
LocationId, SearchQuery, SearchRank
План выполнения:
Итак, он выполняет Index Seek в Locations, используя покрывающий индекс, но почему? он выполняет сканирование индекса в покрывающем индексе LocationCache?
Этот покрывающий индекс имеет LocationId, SearchQuery, SearchRank в индексе (не как «Включенные столбцы»).
Наведите курсор на сканирование индекса. :
Этот запрос должен идти в индексированном представлении, обслуживаемом каталогом FTS SQL Server, потребляемом подключаемым модулем автозаполнения, поэтому он должен быть оптимизирован на 100%.
В настоящий момент указанный выше запрос занимает 3 секунды. Оно должно быть <0.
Есть идеи?