天天看點

如何提升SQL語句的查詢性能

在對資料庫進行操作時,如果SQL語句書寫不當,對程式的效率會造成很大影響。

提高SQL效率可以從一下幾個方面入手:

1,資料庫設計與規劃

  • Primary Key字段的長度盡量小,能用small integer就不要用integer。例如對于員工資料表,如果能用員工編号做主鍵,就不要用身份證号碼。
  • 字元字段如果長度固定,就不要用varchar或nvarchar類型,而應該用char或nchar類型。例如身份證号碼、銀行密碼等字段。
  • 字元長度如果長度不固定,則應該使用varchar或nvarchar類型。除了可節省存儲空間外,存取硬碟也會有效率。例如位址、個人介紹等。
  • 涉及字段時,如果其值可有可無,最好也給一個預設值,并設成不允許NULL。因為有些資料庫在存放和查詢有NULL的資料表時,會花費額外的運算動作,例如SQL Server資料庫。

2,适當地建立索引

  • Primary Key字段可以自動地建立索引,而Foreign Key字段不可以。為Foreign Key字段手動建立索引,即使是很少被JOIN的資料表也有必要這麼做。
  • 為經常被查詢或排序的字段建立索引。
  • 建立索引字段的長度不宜過長,不要用超過20個位元組的字段,例如位址等。
  • 不要為内容重複性高德字段建立索引,例如性别等。
  • 不要為使用率低的字段建立索引。
  • 不宜為過多字段建立索引,否則會影響到INSERT、UPDATE和DELETE語句的性能。
  • 如果資料表存放的資料很少,就不必刻意使用索引。

3,使用索引功能

  在查詢資料表時,使用索引查詢可以極大提升查詢速度,但是如果where子句書寫不當,即使某些列存在索引,也不能使用該索引查詢,而同樣會使用全表掃描,這就造成了查詢速度的降低。在where語句中避免使用一下關鍵字:

  NOT、!=、<>、!>、!<、EXISTS、IN、LIKE、||。

  使用LIKE關鍵字做模糊查詢時,即使已經為某個字段建立了索引,但需要以常量字元開頭才會用到索引,如果以“%”開頭則不會使用索引。例如name like '%To‘ 不啟用name字段上的索引;而 name like ‘To%’會啟用name字段上的索引。

4,避免在where子句中對字段使用函數

5,AND與OR的使用

  在AND運算中,隻要有一個條件用到索引,即可大幅提升查詢速度。但在OR運算中,則要所有的條件都有使用到索引才能提升查詢速度,是以使用OR運算符需要特别小心。

6,JOIN與子查詢

  相對于子查詢,如果能使用JOIN完成的查詢,一般建議使用後者。原因除了JOIN的文法較容易了解外,在多數的情況下,JOIN的性能也會比子查詢高。

7,其它查詢技巧

  DISTINCT、ORDER BY文法,會讓資料庫做額外的計算。如果沒有要過濾重複記錄的需求,使用UNION ALL會比UNION更好,因為後者會加入類似DISTINCT的算法。

8,盡可能使用存儲過程(Stored Procedure)

  Stored Procedure除了經過事先編譯、性能較好以外,也可能減少SQL語句在網絡上的傳遞,友善商業邏輯的重複使用。

轉載于:https://www.cnblogs.com/caozx/p/9184882.html