SQL 2005 profiler kullanarak bazı testler yapıyorum.Sorgu hızlı çalışıyor, ancak saklı yordamda yavaş çalışıyor
Sadece bir SQL sorgusu çalıştıran saklı yordamım var.
Kayıtlı yordamı çalıştırdığımda, uzun bir zaman alır ve 800.000 disk okuma gerçekleştirir.
Aynı sorguyu saklı yordamla çalıştırdığımda 14.000 disk okuması yapar.
Aynı sorguyu OPTION (recompile) ile çalıştırırsam 800.000 disk okuması gerektiğini buldum. Bundan
, ben saklı yordam her seferinde yeniden derlemeye ve bundan soruna neden olduğunu (muhtemelen hatalı) varsayımını.Bu konuda biraz ışık tutabilir mi?
ARITHABORT ON ayarlı.
DECLARE
@Contract_ID INT,
@dt_From smalldatetime,
@dt_To smalldatetime,
@Last_Run_Date datetime,
@rv int
SET @Contract_ID=38
SET @dt_From='2010-09-01'
SET @dt_To='2010-10-01'
SET @Last_Run_Date='2010-10-08 10:59:59:070'
-- This takes over fifteen seconds
exec GET_IF_SETTLEMENT_ADJUSTMENT_REQUIRED @[email protected]_ID,@[email protected]_From,@[email protected]_To,@[email protected]_Run_Date
-- This takes less than one second!
SELECT @rv = (CASE WHEN EXISTS
(
select * from
view_contract_version_last_volume_update
inner join contract_version
on contract_version.contract_version_id = view_contract_version_last_volume_update.contract_version_id
where [email protected]_ID
and volume_date >= @dt_From
and volume_date < @dt_To
and last_write_date > @Last_Run_Date
)
THEN 1 else 0 end)
-- With recompile option. Takes 15 seconds again!
SELECT @rv = (CASE WHEN EXISTS
(
select * from
view_contract_version_last_volume_update
inner join contract_version
on contract_version.contract_version_id = view_contract_version_last_volume_update.contract_version_id
where [email protected]_ID
and volume_date >= @dt_From
and volume_date < @dt_To
and last_write_date > @Last_Run_Date
)
THEN 1 else 0 end) OPTION(recompile)
İki "Gerçek Sorgu Yürütme Planı" arasındaki fark nedir? – Andomar