直接執行
直接執行是執行陳述式的一種最基本的方式。 應用程式會建立含有 Transact-SQL 陳述式的字元字串,然後使用 SQLExecDirect 函數來提交此字串以供執行。 當此陳述式到達伺服器時,SQL Server 會將它編譯成執行計畫,然後立即執行此執行計畫。
直接執行通常是由執行階段建立及執行陳述式的應用程式所使用,而且對於將要單次執行的陳述式也是最有效率的方法。 但是它在許多資料庫中有一個缺點,就是每當執行此 SQL 陳述式時,都必須要剖析及編譯它,這樣會在該陳述式執行多次時增加負擔。
SQL Server 會大幅改善在多使用者環境中經常執行之陳述式的直接執行效能,而且針對經常執行的 SQL 陳述式搭配參數標記使用 SQLExecDirect 可以讓已備妥的執行提高效率。
當連接到 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 陳述式中包含資料常數,而是要改用繫結至程式變數的參數標記。 如需詳細資訊,請參閱<使用陳述式參數>。
使用完整的物件名稱。 如果物件名稱不是完整的,就不會重複使用執行計畫。
盡量讓應用程式連接使用一組常用的連接和陳述式選項。 使用一組選項 (如 ANSI_NULLS) 為連接產生的執行計畫將不會重複用於具有另一組選項的連接。 SQL Server Native Client ODBC 驅動程式和 SQL Server Native Client OLE DB 提供者都會針對這些選項使用相同的預設值。
如果所有以 SQLExecDirect 執行的陳述式都是使用這些慣例所編碼,SQL Server 便可以在有機會時重複使用執行計畫。