直接執行

直接執行是執行陳述式的一種最基本的方式。 應用程式會建置包含 Transact-SQL 語句的字元字串,並使用 SQLExecDirect 函式提交它以供執行。 當語句到達伺服器時,SQL Server將它編譯成執行計畫,然後立即執行執行計畫。

直接執行通常是由執行階段建立及執行陳述式的應用程式所使用,而且對於將要單次執行的陳述式也是最有效率的方法。 但是它在許多資料庫中有一個缺點,就是每當執行此 SQL 陳述式時,都必須要剖析及編譯它,這樣會在該陳述式執行多次時增加負擔。

SQL Server大幅改善在多使用者環境中直接執行常用語句的效能,並使用 SQLExecDirect 搭配常用 SQL 語句的參數標記,可達到備妥的執行效率。

連接到 SQL Server 實例時,SQL Server Native Client ODBC 驅動程式會使用sp_executesql來傳輸SQLExecDirect上指定的 SQL 語句或批次。 SQL Server具有邏輯,可快速判斷以sp_executesql執行的 SQL 語句或批次是否符合產生記憶體中已存在執行計畫的語句或批次。 如果進行比對,SQL Server只會重複使用現有的計畫,而不是編譯新的計畫。 這表示,在具有許多使用者的系統中,以SQLExecDirect執行的常用 SQL 語句,將受益于許多隻有舊版SQL Server中預存程式可用的計畫重複使用優點。

只有當幾位使用者正在執行相同的 SQL 陳述式或批次時,重複使用執行計畫的這項好處才有效。 請遵循編碼慣例來增加不同用戶端執行的 SQL 陳述式非常類似於能夠重複使用執行計畫的機率:

  • 請勿在 SQL 陳述式中包含資料常數,而是要改用繫結至程式變數的參數標記。 如需詳細資訊,請參閱 Using 語句參數

  • 使用完整的物件名稱。 如果物件名稱不是完整的,就不會重複使用執行計畫。

  • 盡量讓應用程式連接使用一組常用的連接和陳述式選項。 使用一組選項 (如 ANSI_NULLS) 為連接產生的執行計畫將不會重複用於具有另一組選項的連接。 SQL Server Native Client ODBC 驅動程式和 SQL Server Native Client OLE DB 提供者都有這些選項的相同預設設定。

如果使用SQLExecDirect執行的所有語句都會使用這些慣例進行編碼,SQL Server可以在商機發生時重複使用執行計畫。

另請參閱

ODBC (執行語句)