Mam dość złożoną (lub brzydką w zależności od tego, jak na nią patrzysz) procedura składowana uruchomiona na SQL Server 2008. Opiera ona wiele logiki na widoku, który ma tabelę pk i tabelę fk. Stół fk jest połączony z tabelą pk nieco ponad 30 razy (tabela fk ma słabą konstrukcję - używa par wartości nazw, które muszę spłaszczyć, niestety, jest to trzecia strona i nie mogę jej zmienić).Generowanie planu zapytań SQL trwa 5 minut, samo zapytanie działa w milisekundach. Co tam?
W każdym razie działało dobrze przez kilka tygodni, aż okresowo zauważyłem bieg, który potrwałby 3-5 minut. Okazuje się, że czas na wygenerowanie planu zapytania. Gdy plan kwerendy istnieje i jest buforowany, sama procedura składowana działa bardzo wydajnie. Sprawy przebiegają sprawnie, dopóki nie pojawi się powód ponownego wygenerowania planu kwerend i buforowania go ponownie.
Czy ktoś to widział? Dlaczego wygenerowanie planu trwa tak długo? Czy istnieją sposoby, aby szybciej opracować plan?
To też jest warte strzału. Chociaż próbowałem PIVOT i niektóre CTE i jak dotąd lewe sprzężenia jako widok były najbardziej wydajne. Czy widziałeś wcześniej, że byłeś szybszy? – TheEmirOfGroofunkistan
Tak. Miałem taką samą logikę (wielokrotne (około 20) lewostronne sprzężenie "tabeli-fk" z jednym "tabelą-wzorcem"), a czas wykonania radykalnie wzrósł po dodaniu kolejnego sprzężenia z tej samej tabeli. Przepisanie tej olbrzymiej - jednej - do dwuetapowej-aktualizacji-aktualizacji naprawdę pomogło. Ale może to był tylko szczególny przypadek niefortunnych indeksów, nie chciałem kopać. (I przepraszam, brakowało "w widoku" w twoim poście) –
np - widok sprawia, że ponowne użycie zapytania jest prostsze, nie jestem pewien, czy jest to konieczne. – TheEmirOfGroofunkistan