sql部分優化

2021-08-20 05:02:31 字數 789 閱讀 9608

(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...