Это, несомненно, случай перехвата параметров и неправильного повторного использования планов выполнения, которые были созданы с другим набором параметров, которые имели очень разную оптимальную схему доступа.
Внезапное изменение к двум доступам разного стиляБыть тем же (а не одним быстрым) настоятельно свидетельствует о том, что кэшированный план выполнения был обновлен до версии, которая теперь работает медленно с обоими методами доступа, или ваши данные или ваши параметры изменились.
По моему опыту, общий виновникв такой небольшой / огромной разнице во времени выполнения используется объединение вложенных циклов, где фактически требуется совпадение хэша.(Для очень небольшого числа строк вложенный цикл превосходит, преодолев определенный довольно низкий барьер, тогда совпадение с хешем становится менее дорогим. Если вам не повезло, что ваши входные данные отсортированы по критериям объединения, объединение слиянием встречается редко.найти, так как сортировка больших наборов, как правило, обходится дороже, чем сопоставление хешей.)
Причина, по которой ваша настройка параметров в SP устранила проблему, заключается в том, что SQL Server узнал, что вы что-то делаете с параметрами, задавих какое-то значение (игнорируя то, что вы задали бы им), и ему пришлось вычислить новый план выполнения, поэтому он выбросил старый и разработал новый путь доступа на основе набора параметров current , получая лучшие результаты.
Если эта проблема не исчезнет, то игра с перекомпиляцией SP / очисткой кэша плана в сочетании с использованием различных параметров, которые должны работать с чрезвычайно различным числом строк, может выявить, где проблема.Посмотрите на план выполнения, который используется для запуска SP с разными параметрами, и посмотрите, как разные стратегии доступа используются в неправильных условиях.