1. 程式人生 > >SQL語句優化

SQL語句優化

函數 提高 我們 查詢 str ont ransac pro sys

1、在查詢中不要使用“select *” 檢索不必要的列會帶來額外的系統開銷,有句話叫做“該省的則省”;

2、在select清單中避免不必要的列,在連接條件中避免不必要的表;

3、不要在子查詢中使用count()求和執行存在性檢查

4、避免使用兩個不同類型的列進行表的連接

5、避免死鎖

6、避免使用count(*)獲得表的記錄數

(1)為了獲得表中的記錄數,我們通常使用下面的SQL 語句: SELECT COUNT(*) FROM dbo.orders 這條語句會執行全表掃描才能獲得行數。 (2)但下面的SQL 語句不會執行全表掃描一樣可以獲得行數: SELECT rows FROM sysindexes

WHERE id = OBJECT_ID(‘dbo.Orders‘) AND indid < 2

7、避免使用動態SQL。(1)動態SQL 難以調試和故障診斷; (2)如果用戶向動態SQL 提供了輸入,那麽可能存在SQL 註入風險。

8、在寫存儲過程中,在開始寫set nocount on ,結束寫set nocount off

(當 SET NOCOUNT 為 ON 時,不返回計數(表示受Transact-SQL 語句影響的行數)。 當 SET NOCOUNT 為 OFF 時,返回計數(默認為OFF)。

即使當 SET NOCOUNT 為 ON 時,也更新 @@ROWCOUNT 函數。

當 SET NOCOUNT 為 ON 時,將不給客戶端發送存儲過程中的每個語句的 DONE_IN_PROC 信息。當使用 Microsoft? SQL Server? 提供的實用工具執行查詢時,在 Transact-SQL 語句(如 SELECT、INSERT、UPDATE 和 DELETE)結束時將不會在查詢結果中顯示"nn 行受影響"。

如果存儲過程中包含的一些語句並不返回許多實際的數據,則該設置由於大量減少了網絡流量,因此可顯著提高性能。

SET NOCOUNT 設置是在執行或運行時設置,而不是在分析時設置。

註釋當SET NOCOUNT 為ON 時,不返回計數(表示受Transact-SQL 語句影響的行數)。當SET NOCOUNT 為OFF 時,返回計數。 ... 結論:我們應該在存儲過程的頭部加上SET NOCOUNT ON 這樣的話,在退出存儲過程的時候加上SET NOCOUNT OFF這樣的話,以達到優化)

SQL語句優化