Добавление заказа к этому запросу возвращается быстрее, чем без, почему?

dba.stackexchange https://dba.stackexchange.com/questions/634

  •  16-10-2019
  •  | 
  •  

Вопрос

Любые идеи о том, почему добавление своего рода в этот запрос возвращается значительно быстрее, чем без заказа по? Я ожидаю противоположного, так что может сделать это?

SELECT TOP (500) r.cID,r.aField,a.Description 
       FROM dbo.tblR r  
            inner join dbo.tblA a on r.aID = a.ID  
            left join dbo.tblX x on x.cID = r.cID 
       WHERE (ISNULL(x.anotherField,'') <> r.anotherField or x.field3 is null) 
            and (r.ID=(select max(ID) from tblR where cID = r.cID and
            ISNULL(aField,'') <> '')) 
            and r.cID in (select ID from tblC)
       ORDER BY r.cID ASC -- when I comment this line out it runs much slower

Планы исполнения не очень помогают.

Это было полезно?

Решение

Наиболее очевидной причиной будет то, что (select max(ID) from tblR where cID = c.cID and ISNULL(aField,'') <> '') Подрегистрация в WHERE пункт в сочетании с TOP 500 заставляет заказать что -то изменить.

В любом случае он, вероятно, будет работать в этом подпроводе по отдельности для каждой строки, в противном случае он может вернуться, пока не найдет 500, которые соответствуют целому WHERE (На самом деле, он будет достаточно ярким, чтобы проверить другие части, где первым, так как они намного дешевле, но все же он будет запускать подзарику для части рядов, которые он встречается). При предположении, больше строк, находящихся на вершине, при сортировке C.CID Match в настоящее время, поэтому он должен запускать подрегистратуре реже, прежде чем найти 500 совпадений, чем при выполнении результатов в том порядке, который планировщик запросов выбирает по умолчанию.

(Я предполагаю, что cS должен быть xS или наоборот, в противном случае запрос не будет проходить как псевдоним c нигде не определяется)

Стоит запустить подобные запросы в студии управления с включенным представлением «План запросов» - затем вы можете увидеть с диаграммы, какие части вызывает разнообразную производительность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top