Sql-Server
是否為儲存過程中執行的每個動態 SQL 查詢生成單獨的執行計劃?
如果我有一個儲存過程,並且我重寫了邏輯,以便將一些查詢作為動態 SQL 執行,那麼這些查詢現在除了儲存過程獲得自己的執行計劃之外,還會獲得自己的執行計劃嗎?
如果是這樣,如果有其他臨時查詢與我的過程中的動態 SQL 查詢完全匹配(或者即使有其他過程使用動態 SQL 呼叫與好)?
是的,您送出的動態 SQL 將被視為 ad-hoc。即,從文本生成散列,使其對所有內容(空格、上/下、搜尋參數等)都很敏感。
如果您碰巧送出了與正常 ad-hoc 完全相同的字元串(不是來自 proc 的動態 sql),或者來自其他過程的動態 SQL,則可以重複使用這些計劃。
什麼對你最好,我們不能說。您可以選擇使用 sp_executesql 並參數化您的查詢以允許計劃重用。OTOH,您現在將進行參數嗅探。為每次執行或重用計劃的計劃生成“付費”。你的選擇。