Я работаю над хранимой процедурой на 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 строк.
Какова причина этого?
Я не могу отладить эту проблему, как отладить это и посмотреть, есть ли какие-либо взаимоблокировки?