where條件的優化:
1、in:至少多乙個轉換的過程(先試圖轉成多個表的連線,如果轉換不成功先執行in裡面的子查詢,再查詢外層記錄)
2、notin:不能應用表索引,可用not exists替換的
3、<>:不用索引,全表掃瞄。替換方案:>x or 與》=的區別 >2會從2開始找資料,>=3則是從3開始找資料。但是》=3不知道是否會影響索引功能,採用哪個需根據實際資料(自己估測)選擇。
5、like:'%%'將不使用索引,'%'引用範圍索引
6、union:二表鏈結後進行排序,刪除重複,再返回結果。union all 直接合併返回結果。
7、sql書寫影響,盡量做到帶上所有者(效能),保持一種風格(同一查詢,書寫不一時可能會共享不了前一次查詢產生的快取)
8、where 後面條件順序:把過濾資料越多的放到越前面。
9、from後表順序:數量越小的放前面。
10、索引的利用:
a、採用函式處理的字段不能利用索引,如:
substr(col1,1,4)=』abcd』,優化處理:col1 like 『abcd%』
b、進行了顯式或者隱式轉換的不能利用索引,如:
col1+20>50,優化處理:col1>30
'x'+col1>'x5400021452',優化處理:col1>'5400021542'
c、條件內包含多個欄位的不能利用索引,如:
col1>col2,無法進行優化
col1+col2=』abcd』,優化處理:col1=』ab』 and col2=』cd
關於索引
1、有大量重複值、且經常有範圍查詢(between, >,< ,>=,< =)和order by、group by發生的列,可考慮建立群集索引;
2、經常同時訪問多列,且每列都含有重複值可考慮建立組合索引;
3、組合索引要盡量使關鍵查詢形成索引覆蓋,其前導列一定是使用最頻繁的列。
資料庫 SQL優化小結
雖然前段時間有學習過這方面的知識,但是在面試的時候,腦子卻一片空白。我想一方面的原因是自己在開發中缺乏對sql優化這方面的關注,也就是缺乏實地應用 另一方面是缺乏總結。sql優化主要是為了提高資料crud的效率。因為索引可以提高資料檢索的效率,所以,大部分的sql優化策略都是為了避免某些sql語句導...
mysql 資料庫庫優化之 小結
show engines mysql 高效獲取資料的資料結構。我的理解索引相當於一本書的目錄,通過目錄就知道要的資料在 不用一頁一頁查閱找出需要的資料。關鍵字 index。不支援,如果希望支援中文,有兩個方案,執行完成插入語句後,開啟索引,統一新增索引。alter table table name ...
資料庫小結
在最近做的專案中碰到了資料庫方面的問題,對遇到的問題和處理方法做乙個小總。1.左 右 連線查詢與多變聯合查詢的區別。假定現在有兩張表user info和adviser verify info表,使用者表中user id為10000的使用者在adviser verify info表中可能有對應的記錄,...