kk系統索引的問題

tonglei2000發表於2015-11-27
sjz和zjk的kk系統現在資料越來越多,查詢顯得有些慢,以前最佳化過,效果不是特別明顯。主要是passcar這張表。
這個表已經採用了分割槽的形式。以gcsj的日期範圍,每月一個分割槽。但是因為一直對分割槽的很多方面不太理解。建立索引的時候
都是建立的local複合索引,索引的第一列是分割槽鍵gcsj,第二列是hphm。在查hphm的時候效率不夠。
忽然發現wxs的系統查詢資料還是非常快的。檢視它的passcar表,一樣的分割槽方式,建立了兩個索引,一個是local索引,列是
gcsj,還有一個是global索引,只有一列是hphm。
按照wxs的索引,調整kk系統。在passcar表上共兩個索引,一個是local索引,欄位是gcsj,一個是global索引,欄位也只有hphm一個,不加分割槽鍵。索引建立完成後,查詢單個月內的資料oracle使用的是hphm的索引,速度飛快。跨月oracle使用的gcsj的local索引,速度還是很慢。對比wxs,跨月查詢使用的還是hphm索引,速度飛快。為什麼我的系統就不走hphm的索引呢。考慮是oracle最佳化器自己選擇的結果。
我首先想的解決辦法是建立global分割槽索引試試,但是建立的時候要求必須使用分割槽字首,即gcsj。這個複合索引我用過,效率很低。既然建立global的分割槽索引要求分割槽字首,我決定建立local索引,但是索引裡面只有一列,即hphm。索引順利建立完成後
,馬上測試,查詢單個月內的資料速度飛快。跨月oracle使用的gcsj的複合local索引,速度還是很慢。
最後我的判斷是oracle最佳化器版本的原因。kk系統是10.2.0.4.wxs的系統是11.2.0.3.
索引的調整已經沒有辦法了,我只好強制讓oracle走hphm的索引了。網上找了一些資料,又進行了認真測試,正確的寫法
select * from passcar
select /*+INDEX(a index_hphm_local)*/ * from passcar a
語法要點:
/*+INDEX(a index_hphm_local)*/ 這裡的/*...*/中間不要有空格 ,表名要用別名。
以前認識太膚淺了,以為分割槽表,建立索引,第一列只有是分割槽鍵,才會有效率,所以建立索引的時候一直在這個圈裡面轉悠。導致索引的效率很低。建立基於hphm的索引,速度提升明顯。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13337857/viewspace-1847676/,如需轉載,請註明出處,否則將追究法律責任。

相關文章