SQL語句效率問題的幾點總結

2021-08-30 07:06:21 字數 2351 閱讀 8934

1. sql優化的原則是:

將一次操作需要讀取的block數減到最低,即在最短的時間達到最大的資料吞吐量。  

調整不良sql通常可以從以下幾點切入:  

檢查不良的sql,考慮其寫法是否還有可優化內容  

檢查子查詢   考慮sql子查詢是否可以用簡單連線的方式進行重新書寫  

檢查優化索引的使用  

考慮資料庫的優化器  

2. 避免出現select   *   from   table     語句,要明確查出的字段。    

3. 在乙個sql語句中,如果乙個where條件過濾的資料庫記錄越多,

定位越準確,則該where條件越應該前移。  

4. 查詢時盡可能使用索引覆蓋。即對select的字段建立復合索引,

這樣查詢時只進行索引掃瞄,不讀取資料塊。  

5. 在判斷有無符合條件的記錄時建議不要用select   count   (*)和select   top   1   語句。  

6. 使用內層限定原則,在拼寫sql語句時,將查詢條件分解、分類,

並盡量在sql語句的最裡層進行限定,以減少資料的處理量。  

7. 應絕對避免在order   by子句中使用表示式。  

8. 如果需要從關聯表讀資料,關聯的表一般不要超過7個。  

9. 小心使用   in   和   or,需要注意in集合中的資料量。建議集合中的資料不超過200個。  

10. <>   用   <   、   >   代替,>用》=代替,《用<=代替,這樣可以有效的利用索引。  

11. 在查詢時儘量減少對多餘資料的讀取包括多餘的列與多餘的行。  

12. 對於復合索引要注意,例如在建立復合索引時列的順序是f1,f2,f3,

則在where或order   by子句中這些字段出現的順序要與建立索引時的字段順序一致,

且必須包含第  一列。只能是f1或f1,f2或f1,f2,f3。否則不會用到該索引。 

13. 多表關聯查詢時,寫法必須遵循以下原則,這樣做有利於建立索引,提高查詢效率。

格式如下

select   sum(table1.je)   from   table1   table1,     table2     table2,               

table3     table3   where   (table1的等值條件(=))   and   (table1的非等值條件) 

and   (table2與table1的關聯條件)   and (table2的等值條件)   and   (table2的非等值條件)    

and (table3與table2的關聯條件)   and   (table3的等值條件)   and   (table3的非等值件)。  

注:關於多表查詢時from     後面表的出現順序對效率的影響還有待研究。  

14. 子查詢問題。對於能用連線方式或者檢視方式實現的功能,不要用子查詢。

例如:select   name    from   customer   where  

customer_id   in   (   select     customer_id   from   order   where   money>1000)。

應該用如下語句代替:select   name   from   customer  

inner   join   order   on     customer.customer_id=order.customer_id  

where   order.money>100。  

15. 在where   子句中,避免對列的四則運算,

特別是where   條件的左邊,嚴禁使用運算與函式對列進行處理。

比如有些地方   substring   可以用like代替。  

16. 如果在語句中有not   in(in)操作,

應考慮用not   exists(exists)來重寫,最好的辦法是使用外連線實現。  

17. 對乙個業務過程的處理,應該使事物的開始與結束之間的時間間隔越短越好,

原則上做到資料庫的讀操作在前面完成,資料庫寫操作在後面完成,避免交叉。  

18. 請小心不要對過多的列使用列函式和order   by,group   by等,謹慎使用disti軟體開發t。  

19. 用union   all   代替   union,資料庫執行union操作,

首先先分別執行union兩端的查詢,

將其放在臨時表中,然後在對其進行排序,過濾重複的記錄。  

當已知的業務邏輯決定query   a和query   b中不會有重覆記錄時,

應該用union   all代替union,以提高查詢效率。

SQL語句效率問題的幾點總結

1.sql優化的原則是 將一次操作需要讀取的block數減到最低,即在最短的時間達到最大的資料吞吐量。調整不良sql通常可以從以下幾點切入 檢查不良的sql,考慮其寫法是否還有可優化內容 檢查子查詢 考慮sql子查詢是否可以用簡單連線的方式進行重新書寫 檢查優化索引的使用 考慮資料庫的優化器 2.避...

SQL語句效率問題的幾點總結

1.sql優化的原則是 將一次操作需要讀取的block數減到最低,即在最短的時間達到最大的資料吞吐量。調整不良sql通常可以從以下幾點切入 檢查不良的sql,考慮其寫法是否還有可優化內容 檢查子查詢 考慮sql子查詢是否可以用簡單連線的方式進行重新書寫 檢查優化索引的使用 考慮資料庫的優化器 2.避...

SQL語句效率問題的幾點總結 《轉》

1.sql優化的原則是 將一次操作需要讀取的block數減到最低,即在最短的時間達到最大的資料吞吐量。調整不良sql通常可以從以下幾點切入 檢查不良的sql,考慮其寫法是否還有可優化內容 檢查子查詢 考慮sql子查詢是否可以用簡單連線的方式進行重新書寫 檢查優化索引的使用 考慮資料庫的優化器 2.避...