1.表名順序:不影響業務邏輯情況下,一般情況下大表在左,小表在右;三表以上出現交叉表,則交叉表在前。
2.where子句順序:執行順序oracle由右到左,效率基本相同;
3.join表的右表條件盡量寫在on中,不要在where之後(注:使用左連線兩者是有區別的);
4.多個大表的join盡量先分頁再連線;
5.避免全表掃瞄:
5.1 避免對索引列進行函式或是表示式操作;
5.2 索引列最好是not null列,使用is not null 永遠不會使用索引列,is null有時也不會使用;
5.3 避免使用<> != 不等於操作符,會限制索引,引起全表查詢;
5.4 '%a%','%a' 不使用索引, 'a%'使用索引;
5.5 非索引列使用or查詢會導致全表查詢;
5.6 使用not in 不會使用索引,用not exists 或者(外連線+條件)替代;
6.查詢結果中避免使用「*」, 用count(0)替代count(*);
7.使用表的別名來避免列相同查詢錯誤。
8.使用》=替代》; a1 = a2*100 替代a1/a2=100;datetime =to_char('20121122','yyyymmdd') 替換 to_char(datetime,'yyyymmdd') = '20121122'
9.使用union 替換 or; exists(或外連線)替換 in;(注: in 中個數如果是char<100,int<1000個效果可以,否則必須要用其他替代);
sql部分優化
1 負向條件查詢不能使用索引 select from order where status 0 and stauts 1 not in not exists都不是好習慣 可以優化為in查詢 select from order where status in 2,3 2 前導模糊查詢不能使用索引 se...
查詢優化 SQL優化
查詢優化注意點 代表查詢速度比較 1 所有查詢必須注意 的使用必要性 cout 1 cout 2 字段 主鍵索引 字段 普通索引 字段 沒有索引 3 乙個字段 多個字段 欄位多越慢 4 大於10000和大於10001的區別 後者大於前者 5 列沒別名 列 有別名6 兩個條件,where時應該將符合資...
SQL優化 索引優化
一 發現哪些sql語句有效能問題 開啟mysql慢查詢日誌對sql語句進行監控 show variables like slow query log 檢視是否開啟慢查詢日誌 set global slow query log on 開啟慢查詢日誌 set global log queries not...