Хранимый процесс SQL Server выполняется (намного) дольше, чем тот же запрос, выполненный из текста в Management Studio - PullRequest
7 голосов
/ 17 апреля 2009

Так что здесь немного странно ... У меня есть сохраненный процесс, который занимает 40 секунд. Я копирую содержимое сохраненного процесса в новое окно запроса, изменяю 2 входных параметра (которые оба являются датами), чтобы они были объявлены и установлены, и запускаю запрос. Это в основном мгновенное, суб 1 секунду исполнения. Единственное отличие заключается в том, что хранимый процесс принимает 2 даты в качестве параметров.

Кто-нибудь знает, что может сделать это?

(я использую SQL Server 2005)

Ответы [ 4 ]

13 голосов
/ 17 апреля 2009

Перекомпиляция отслеживает параметры, поэтому это не имеет значения.

Эта статья объясняет мое утверждение ...

... значения параметров снимаются во время компиляция или перекомпиляция ...

Вам необходимо замаскировать параметры:

ALTER PROCEDURE [uspFoo]
    @Date1 datetime,
    @Date2 datetime
AS
BEGIN
    DECLARE @IDate1 datetime, @IDate2 datetime;
    SELECT @IDate1 = @Date1, @IDate2 = @Date2;
    -- Stuff here that depends on @IDate1 and @IDate2
END
4 голосов
/ 23 октября 2013

Как говорит gbn, это проблема с анализом параметров. Альтернативным способом его предложения является добавление следующей строки в конце вашего запроса:

OPTION (RECOMPILE)
1 голос
/ 07 августа 2012

У меня была похожая проблема, и я обнаружил, что она вызвана тем, что я настраивал параметр как DATE, но столбец, с которым он сравнивался в предложении WHERE, был в DATETIME, поэтому SSMS преобразовывал тип данных для каждого ряд это было сравнение. Изменение типа данных параметра на DATETIME или маскирование параметра, как указано выше, решает проблему.

1 голос
/ 17 апреля 2009

Запустите профилировщик и запишите планы запросов на выполнение. Проверьте, в чем заключаются различия - возможно, вы сможете настроить запрос или вызвать определенный план.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...