SQL 語句調優(整理)(一)

面試筆試中經常會涉及到SQL的調優,然而,SQL性能上的優化可以通過修改系統配置但是其大部分來自對SQL語句的優化,在此我整理了一些面試筆試會用得到的SQL優化的小技巧!


1.查詢的模糊匹配
儘量避免在一個複雜查詢裏面使用 LIKE '%parm1%'—— 紅色標識位置的百分號會導致相關列的索引無法使用,最好不要用.
解決辦法:
其實只需要對該腳本略做改進,查詢速度便會提高近百倍。改進方法如下:
a、修改前臺程序——把查詢條件的供應商名稱一欄由原來的文本輸入改爲下拉列表,用戶模糊輸入供應商名稱時,直接在前臺就幫忙定位到具體的供應商,這樣在調用後臺程序時,這列就可以直接用等於來關聯了。

b、直接修改後臺——根據輸入條件,先查出符合條件的供應商,並把相關記錄保存在一個臨時表裏頭,然後再用臨時表去做複雜關聯


2.法則:不要在建立的索引的數據列上進行下列操作:
◆避免對索引字段進行計算操作
◆避免在索引字段上使用not,<>,!=
◆避免在索引列上使用IS NULL和IS NOT NULL
◆避免在索引列上出現數據類型轉換
◆避免在索引字段上使用函數
◆避免建立索引的列中使用空值


3.複雜操作
部分UPDATE、SELECT 語句 寫得很複雜(經常嵌套多級子查詢)——可以考慮適當拆成幾步,先生成一些臨時數據表,再進行關聯操作


4.對Where 語句的法則
a、避免在WHERE子句中使用in,not  in,or 或者having。可以使用 exist 和not exist代替 in和not in。
b、可以使用錶鏈接代替 exist。Having可以用where代替。

5.排序
避免使用耗費資源的操作,帶有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL語句會啓動SQL引擎 執行,耗費資源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要執行兩次排序

6.臨時表
慎重使用臨時表可以極大的提高系統性能

7.IS NULL 或IS NOT NULL操作(判斷字段是否爲空) 
判斷字段是否爲空一般是不會應用索引的,因爲索引是不索引空值的。
推薦方案:用其它相同功能的操作運算代替

如:a is not null 改爲 a>0 或a>’’等。不允許字段爲空,而用一個缺省值代替空值,如申請中狀態字段不允許爲空,缺省爲申請

8.LIKE操作符 
LIKE操作符可以應用通配符查詢,裏面的通配符組合可能達到幾乎是任意的查詢,但是如果用得不好則會產生性能上的問題,如LIKE ‘%5400%’ 這種查詢不會引用索引,而LIKE ‘X5400%’則會引用範圍索引。 

9.確保每個表都有主鍵


10.將TSQL代碼從應用程序遷移到數據庫中


11.在查詢中不要使用“select *” 


12.在select清單中避免不必要的列,在連接條件中避免不必要的表


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


10.使用全文搜索搜索文本數據,取代like搜索
 全文搜索始終優於like搜索:
(1)全文搜索讓你可以實現like不能完成的複雜搜索,如搜索一個單詞或一個短語,搜索一個與另一個單詞或短語 相近的單詞或短語,或者是搜索同義詞;
(2)實現全文搜索比實現like搜索更容易(特別是複雜的搜索);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章