2011-04-28 155 views

回答

10

Prepare method is actually on DbCommand,所有從它派生出來的類都會拿起。

它的作用是針對DbCommand適用的數據庫提供程序。然而,可以肯定地說(儘管不是絕對的規則),在大多數地方,如果命令是存儲過程,它將產生一個無操作(它被記錄爲override of Prepare on SqlCommand),因爲存儲過程通常有它們的查詢由於之前的調用,明確的優化調用或創建(再次取決於底層數據庫),優化了計劃。

但是,如果您使用的是存儲過程而不是而不是,而是實時生成的參數化查詢,則此調用將爲底層數據庫提供生成查詢優化版本的機會。

當您知道要在很短的時間內(它實際上取決於數據庫以及查詢計劃緩存的時間)多次執行命令時,通常會這樣做。

應該說SQL Server(截至2005年,IIRC)在第一次執行後根據使用情況對參數化查詢計劃進行高速緩存(我認爲高速緩存是時間降級的高速緩存,其重置或衰減速度放慢所以如果你打算用同樣的參數化查詢進行多個調用,那麼除了調用查詢準備工作之外,你可能沒有太多的調用Prepare(這也可能是一個好處,取決於什麼工作是你必須執行的)。

+1

當您使用不同的參數多次使用存儲過程時,我使用Prepare方法。如果你只是改變參數,結果仍然是第一組參數的結果。我不知道這是否是最好的方式,但無論如何,這個方法在存儲過程中不是無用的。 (文件說它可以,而不是它是沒有操作的。) – pikachu 2013-10-26 15:29:27

2

正常情況下,當您執行查詢時,會從解析字符串到運行執行計劃。通過調用Prepare,它將盡可能地執行過程,而無需實際運行執行計劃。

當反覆運行相同的命令時,這非常有用。您將節省一些執行時間,因爲整個過程不必每次重複。

7

更多相關信息請登錄here

但是,請記住:

在SQL Server中,準備/執行 模型沒有顯著的性能 在直接執行的優勢, 因爲這樣的SQL Server重用 執行計劃。 SQL Server具有 高效算法用於匹配 當前SQL語句與執行 爲以前的 生成的計劃執行相同的SQL語句。 如果應用程序執行SQL語句 與參數標記 多次,SQL Server將重用 執行計劃從第一 執行第二和 後續執行(除非該計劃從過程緩存 年齡)。該 準備/執行模型還具有以下優點 :

由 識別手柄找到一個執行計劃比用於匹配 SQL語句來執行現有計劃 算法更高效 。

應用程序可以控制何時創建執行計劃以及何時重用它的執行計劃 。

準備/執行模型是可移植的 到其他數據庫,包括早期的 版本的SQL Server。

相關問題