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