Хранимая процедура производительности запроса по сравнению с отдельными операторами - PullRequest
0 голосов
/ 26 мая 2020

Я работаю над хранимой процедурой на SQL сервере, которая выполняет следующие функции.

У меня есть следующие запросы в хранимой процедуре на основе временных таблиц # tmp1, # tmp2

INSERT INTO #tmp1 (col1, col2, col3)
    SELECT col1, col2, col3 
    FROM physical1 (NOLOCK) 
    WHERE #physical1.x = y

INSERT INTO #tmp2 (col4, col5, col6)
    SELECT col4, col5, col6 
    FROM physical1 (NOLOCK)
    JOIN physical3....
    WHERE NOT EXISTS (SELECT 1 FROM #tmp1 WHERE #tmp1.col1 = #tmp2.col3)

Когда я запускаю отдельные запросы для загрузки # tmp1, а затем запускаю для загрузки # tmp2, запрос выполняется плавно, а результаты получаются довольно быстро.

Но когда я помещаю это как часть хранимой процедуры и вызывайте его из моего приложения или используя EXEC, запрос занимает много времени ~ примерно 200 секунд.

Общее количество строк в # tmp1 и физическом 1 составляет примерно 95000 строк.

Какова причина этого?

Я не могу отладить эту проблему, как отладить это и посмотреть, есть ли какие-либо взаимоблокировки?

...