2011-01-28 20 views
14

saklanan prosedürleri WITH RECOMPILE seçeneğin Benim anlayış genelde bir eğik parametre olarak tek saklı yordam çağrısı ile maddesini kullanarak sınırlıdır:SQL Server: “WITH RECOMPILE” ifadesinin proc tanımında kullanılmasının etkileri?

exec sp_mystoredproc 'Parameter1', 2, '1/28/2011' with recompile 

fiili proc tanımı WITH RECOMPILE dahil etkileri nelerdir? Bu, her yürütüldüğünde proc'u yeniden derler mi? Ya da sadece proc değiştirilir mi?

Örnek:

CREATE PROCEDURE [dbo].[sp_mystoredproc] 
    (@string1   varchar(8000) 
    ,@int2    int = 2 
    ,@dt_begin   DATETIME 
    with recompile 
AS 
... proc code ... 

cevap

25

Bu proc tüm sorgular o çalıştırıldığı her zaman planlarını yeniden yapar.

Faydalı olarak, prok parametrelerinin değerleri filtre seçiciliğini etkiler.

Say, bu sorgu için en uygun planı: Tarih aralığı o küçük eğer bir indeks taraması veya büyükse

SELECT * 
FROM orders 
WHERE order_date BETWEEN @begin_report AND @from_report 

bir tam tarama olacaktır.

WITH RECOMPILE kullanılarak oluşturuldu, proc her bir yürütme planı oluşturacak; Bir olmadan, tek bir plana sadık kalacaktır (ancak kendini yeniden derlenmeye harcayacak).

Bu ipucu genellikle, genel sorgulama süresi büyük olduğunda ve planın yeniden oluşturulma süresi daha iyi bir plan tarafından kaydedilen süreye kıyasla ihmal edilebilir olduğunda, büyük hacimli verileri işleyen ve karmaşık raporlar gerçekleştiren provalarda kullanılır.