Biorąc pod uwagę, że optymalizator nie może poświęcić tyle czasu, ile potrzebuje (musi zminimalizować czas wykonania i nie przyczyniać się do niego), aby zbadać wszystkie możliwe plany wykonania, które czasami zostaje odcięty.
Zastanawiałem się, czy można to przesłonić, aby cały czas zapewnić optymalizatorowi potrzeby (lub pewną liczbę milisekund).
Nie potrzebuję tego (bankomat), ale mogę sobie wyobrazić scenariusz, w którym złożone zapytanie jest wykonywane w ciasnej pętli, a Ty chcesz opracować optymalny plan i buforować go wcześniej.
Oczywiście, że masz ciasną pętlę, powinieneś przepisać zapytanie, aby odeszło, ale trzymaj się mnie.
Jest to raczej pytanie z ciekawości, a także sprawdzenie, czy czasami istnieje różnica między optymalizacją zwartą a pełną.
Okazuje się, że można dać optymalizatorowi więcej czasu za pomocą flagi śledzenia 2301. Nie jest to dokładnie to, o co prosiłem, ale się zbliża.
Najlepsze informacje, jakie znalazłem na ten temat, znajdują się w Rozszerzeniach modelowania procesorów zapytań w SQL Server 2005 SP1 autorstwa Iana Jose.
Ostrożnie używaj tej flagi śledzenia! Ale może być przydatny przy opracowywaniu lepszych planów. Zobacz też:
- Artykuły oznaczone przez Granta Fritcheya „poziomem optymalizacji” .
- Przed uaktualnieniem do SQL Server 2008… autorstwa Brenta Ozara.
- Opcje dostrajania dla programu SQL Server podczas pracy z wysokowydajnymi obciążeniami przez wsparcie Microsoft.
Myślałem o zapytaniach z dużą liczbą złączeń, w których przestrzeń rozwiązania dla kolejności łączenia eksploduje wykładniczo. Heurystyka, której używa SQL Server, jest całkiem dobra, ale zastanawiałem się, czy optymalizator zaproponowałby inną kolejność, gdyby miał więcej czasu (w zakresie sekund lub nawet minut).