W zapytaniach dodaj OPTION(OPTIMIZE FOR UNKNOWN)
(jako ostatnia klauzula), aby zapobiec podsłuchiwaniu parametrów. Składnia i wyjaśnienia znajdują się w dokumentacji Wskazówki dotyczące zapytań
.
To, co SQL Server robi przy pierwszym uruchomieniu procedury składowanej, to optymalizacja planów wykonania dla parametrów, które zostały do niego przekazane. Odbywa się to w procesie zwanym Parameter Sniffing
.
Ogólnie plany wykonania są buforowane przez SQL Server, dzięki czemu SQL Server nie musi za każdym razem ponownie kompilować tego samego zapytania. Przy następnym uruchomieniu procedury SQL Server ponownie użyje planu(ów) wykonania dla zawartych w nim zapytań... Jednak plany wykonania mogą być całkowicie nieefektywne, jeśli wywołasz je z innymi parametrami .
Opcja, którą ci dałem, powie kompilatorowi SQL, że plan wykonania nie powinien być optymalizowany pod konkretne parametrów, ale raczej dla dowolnych parametr, który jest przekazywany do procedury składowanej.
Aby zacytować dokumentację:
W niektórych przypadkach procedury składowane mogą korzystać z funkcji wykrywania parametrów, w niektórych nie. W przypadku procedur składowanych, które nie korzystają z funkcji wykrywania parametrów, możesz dodać opcję do każdego zapytania, które używa dowolnego z parametrów procedury składowanej.