組合索引

一、組合索引的適用場景

適用在單獨查詢返回記錄很多,組合查詢後忽然返回記錄很少的情況:
    比如where 學歷=碩士以上 返回不少的記錄
    比如where 職業=收銀員 同樣返回不少的記錄
    於是無論哪個條件查詢做索引,都不合適。
    可是,如果學歷爲碩士以上,同時職業又是收銀員的,返回的就少之又少了。
    於是聯合索引就可以這麼開始建了。

組合索引有時可以避免回表;

建立組合索引的列不易過多,一般不超過3個字段;

二、組合索引的順序問題

要考慮單獨的前綴查詢情況(否則單獨前綴查詢的索引不能生效或者只能用到跳躍索引),   比如你在建id,object_type的聯合索引時,要看考慮是單獨where id=xxx查詢的多,還是單獨where object_type查詢的多。

僅等值無範圍查詢時,組合索引順序不影響性能(比如where col1=xxx and col2=xxx,無論COL1+COL2組合還是COL2+COL1組合,效果是一樣的

組合索引最佳順序一般是將列等值查詢的列置前。(測試組合索引在條件是不等的情況下的情況,條件經常是不等的,要放在後面,讓等值的在前面),如下:

create index idx_id_type on t(object_id,object_type);
create index idx_type_id on t(object_type,object_id);

select /*+index(t,idx_id_type)*/ *  from   t where object_id>=20 and object_id<2000 and object_type='TABLE';   //不推薦

select /*+index(t,idx_type_id)*/ *  from  t  where object_id>=20 and object_id<2000   and object_type='TABLE'; //推薦

發佈了83 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章