(1)負向條件查詢不能使用索引
select * from order where status!=0 and stauts!=1
not in/not exists都不是好習慣
可以優化為in查詢:
select * from order where status in(2,3)
(2)前導模糊查詢不能使用索引
select * from order where desc like '%xx'
而非前導模糊查詢則可以:
select * from order where desc like 'xx%'
(3)資料區分度不大的字段不宜使用索引
select * from user where ***=1
原因:性別只有男,女,每次過濾掉的資料很少,不宜使用索引。
經驗上,能過濾80%資料時就可以使用索引。對於訂單狀態,如果狀態值很少,不宜使用索引,如果狀態值很多,能夠過濾大量資料,則應該建立索引。
(4)在屬性上進行計算不能命中索引
select * from order where year(date) < = '2017'
即使date上建立了索引,也會全表掃瞄,可優化為值計算:
select * from order where date < = curdate()
或者:select * from order where date < = '2017-01-01'
部分SQL優化
1.表名順序 不影響業務邏輯情況下,一般情況下大表在左,小表在右 三表以上出現交叉表,則交叉表在前。2.where子句順序 執行順序oracle由右到左,效率基本相同 3.join表的右表條件盡量寫在on中,不要在where之後 注 使用左連線兩者是有區別的 4.多個大表的join盡量先分頁再連線 ...
查詢優化 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...