大家都知道索引可以提高速率消除排序等,但是實(shí)際使用中往往存在濫用的情況,不僅浪費(fèi)了資源,而且索引還起到了負(fù)面的作用。往往大家還不能覺察到這樣的錯(cuò)誤,導(dǎo)致生產(chǎn)系統(tǒng)故障。 普通索引: 普通索引很簡(jiǎn)單使用,不過實(shí)際上還有一些小的誤區(qū)。
1.問題:count(1) avg() sum() min() max()只有當(dāng)索引非空情況下查詢才會(huì)走索引
解決方案:count()的時(shí)候如果有索引有空值無法解決。而avg() sum() min() max()處理時(shí)候加不加索引 is not null,結(jié)果一樣,但是加索引is not null 時(shí)候會(huì)走索引掃描速度提高很多。
2.min(),max()同時(shí)查詢時(shí)候只有索引非空時(shí)候才會(huì)走索引。
解決方案:加索引is not null,而且max() min()分開進(jìn)行查詢效率更高。
3.問題:返回非索引列會(huì)產(chǎn)生table access by index rowid)
解決方案:如果不需要查詢非索引列盡量避免,這樣可避免table access by index rowid,實(shí)在不行建立組合索引
4.問題:索引可以提高速度,是不是索引越多越好?
解決方案:索引并不是越多越好,索引要建的合理,否則插入、更新、刪除效率很低。如果某一列有普通索引和組合索引,這時(shí)候考慮是不是如果組合索引第一列為普通索引時(shí)候,drop普通索引。
另外也可以考慮現(xiàn)將索引失效,然后等操作完畢后使得索引生效。 當(dāng)然生產(chǎn)庫的操作盡量在業(yè)務(wù)少的時(shí)候做,以免占用資源,對(duì)系統(tǒng)造成壓力。
更多信息請(qǐng)查看IT技術(shù)專欄