Има няколко възможни обяснения защо виждате това поведение. Някои често срещани са
- Подзаявката или CTE може да се преоценяват многократно.
- Материализиране на частични резултати в
#temp
таблицата може да наложи по-оптимален ред на свързване за тази част от плана, като премахне някои възможни опции от уравнението. - Материализиране на частични резултати в
#temp
таблицата може да подобри останалата част от плана чрез коригиране на лошите оценки на кардиналността.
Най-надеждният метод е просто да използвате #temp
маса и я материализирайте сами.
При липса на това по отношение на точка 1 вижте Предоставяне на намек за принудително междинно материализиране на CTEs или производни таблици
. Използването на TOP(large_number) ... ORDER BY
често може да насърчи резултатът да бъде буфериран, вместо да се преоценява многократно.
Дори и това да работи обаче, няма статистика за макарата.
За точки 2 и 3 ще трябва да анализирате защо не получавате желания план. Евентуално пренаписване на заявката, за да се използват предикати, които могат да се добавят, или актуализиране на статистика може да доведе до по-добър план. Ако не успеете, можете да опитате да използвате подсказки за заявка, за да получите желания план.