參數化和即席查詢,都是一個二難的選擇。
一旦選擇參數化 就有可能帶來 一種情況就是 執行計劃反複被利用。
不會通過收集現有的統計資訊,出一個比較優異的執行計劃。
即席查詢也就是 ad hoc query,每次都需要重編譯,花費比較大。
這個是一個2難,需要平衡。對于這個問題 sql server 有 簡單參數化,強制參數化和2008 才有的optimize for ad hoc workloads。
optimize for ad hoc workloads 的原理大概如此:
當你第一次執行 ad hoc 查詢的時候,被編譯出來的執行計劃,sql server 存個一部分。
為什麼不全存呢,如果全存,adhoc 查詢很頻繁,那麼不就給 記憶體帶來壓力了。
當你第二次查詢的時候,就儲存這個執行計劃。
當你第三次運作的時候,就可以直接從cache 内讀取出來執行計劃。
對sql server 運作還是又好處的,沒事兒就開着吧