数据库优化小结
WHERE條件的優化:
1、IN:至少多一個轉換的過程(先試圖轉成多個表的連接,如果轉換不成功先執行IN里面的子查詢,再查詢外層記錄)
2、NOTIN:不能應用表索引,可用NOT EXISTS替換的
3、<>:不用索引,全表掃描。替換方案:>X OR <Y
4、>與>=的區別 >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、組合索引要盡量使關鍵查詢形成索引覆蓋,其前導列一定是使用最頻繁的列。
轉載于:https://www.cnblogs.com/jiu9gm/archive/2011/01/28/1947092.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: android用户界面-菜单
- 下一篇: linux cmake编译源码,linu