У меня есть эти два запроса:Плохая сгруппированная скорость поиска индекса?
SELECT SELECT NamesRecord.NameID, NamesRecord.FulfillmentAddressID NameFulfillmentAddressID, ContractRecord.FulfillmentAddressID, ContractRecord.BillingAddressId
FROM Magnet.dbo.ContractRecord ContractRecord
INNER JOIN Magnet.dbo.NamesRecord NamesRecord
ON NamesRecord.NameId = ContractRecord.DonorId
WHERE NameID > -1
AND (EXISTS (
SELECT 1
FROM Magnet.dbo.AddressRecord AddressRecord
WHERE AddressRecord.AddressId = ContractRecord.FulfillmentAddressId
AND BuildingFloor LIKE 'M%')
OR EXISTS (
SELECT 1
FROM Magnet.dbo.AddressRecord AddressRecord
WHERE AddressRecord.AddressId = ContractRecord.BillingAddressId
AND BuildingFloor LIKE 'M%'))
SELECT SELECT NamesRecord.NameID, NamesRecord.FulfillmentAddressID NameFulfillmentAddressID, ContractRecord.FulfillmentAddressID, ContractRecord.BillingAddressId
FROM Magnet.dbo.ContractRecord ContractRecord
INNER JOIN Magnet.dbo.NamesRecord NamesRecord
ON NamesRecord.NameId = ContractRecord.DonorId
WHERE NameID > -1
AND (EXISTS (SELECT 1
FROM Magnet.dbo.AddressRecord AddressRecord
WHERE AddressRecord.AddressId IN (ContractRecord.FulfillmentAddressId, ContractRecord.BillingAddressId)
AND BuildingFloor LIKE 'M%'))
Первый запрос работает более чем в 10 раз быстрее, чем второй. В соответствии с Планом выполнения первый запрос использует два кластерных индексатора с «BuildingFloor LIKE« M% »в качестве предиката и индексный поиск в ContractRecord для каждого из подвыборников в предложении WHERE (40% к югу от выбора).
Во втором запросе используется кластерный указатель поиска с «BuildingFloor LIKE» M% '»в качестве предиката и предикат поиска для ограничений AddressId (96% стоимости). Оценочное количество строк также полностью исключено (по сравнению с 250 действительными против 1).
Как повысить производительность второго запроса? Могу ли я заставить SQL Server выбрать альтернативную стратегию или мне нужно изменить индексы в таблицах?
Кажется, что разница в возвращаемых наборах результатов. Я сделаю еще несколько исследований, прежде чем опубликовать комментарий. – ilitirit
ОК, я нашел проблему, и это была моя ошибка. Я не включал несколько требуемых столбцов в оператор select. – ilitirit
Насколько быстрее это? – yfeldblum