oracle 復合索引

2021-10-03 18:32:40 字數 1784 閱讀 4380

**

oracle通過復合索引優化查詢及不走索引的8種情況 :

建立復合索引;

create index [索引名稱] on [表名(列1,列2)];

--例子

create index name on employee (emp_lname, emp_fname);

1.復合索引: 字首性(prefixing)

先從例子說起.假設省,市,縣分別用3個字段儲存資料,並建立了乙個復合索引.請記住:oracle索引,包括復合索引都是排序的.

例如該復合索引在資料庫索引樹上是這樣排序的,即先按省排序,再按市排序,最後按縣排序:

省  市  縣

北京  北京  東城

北京  北京  西城

北京  北京  海淀

黑龍江  哈爾濱  道里區

黑龍江  哈爾濱  道外區

黑龍江  哈爾濱  香坊區

索引結構是先按省排序的,所以只要給出省名,就能使用索引.如果沒有省名,oracle就成了無頭蒼蠅,亂找一氣,變成了全表掃瞄了.例如,如果你只給乙個縣條件,如"香坊區",oracle肯定不會使用該索引了

2.關於skip scan index

有時候復合索引第乙個字段沒有在語句**現,oralce也會使用該索引.對,這叫oralce的skip scan index功能,oracle 9i才提供的.

skip scan index功能適合於什麼情況呢?如果oracle發現第乙個字段值很少的情況下,例如假設emp表有gender(性別)字段,並且建立了(gender,ename,job,mgr)復合索引.因為性別只有男和女,所以為了提高索引的利用率,oracle可將這個索引拆成('男',ename,job,mgr),('女',ename,job,mgr)兩個復合索引.這樣即便沒有gender條件,oracle也會分別到男索引樹和女索引樹進行搜尋.但是,(gender,ename,job,mgr)索引本身設計是不合理的,它違背了復合索引的第二個原理,可選性(selectivity),見下面描述.       

3.復合索引的第二個原理:可選性(selectivity)

oracle建議按欄位可選性高低進行排序,即字段值多的排在前面.例如,(ename,job,mgr,gender),(縣,市,省).這是因為,字段值多,可選性越強,定位的記錄越少,查詢效率越高.例如,全國可能只有乙個"開福區",而湖南省的記錄則太多了.

4.復合索引設計建議

(1).分析sql語句中的約束條件欄位.

(2).如果約束條件字段比較固定,則優先考慮建立針對多字段的普通b*樹復合索引.如果同時涉及到月份,納稅人識別號,稅務機關**3個字段的條件,則可以考慮建立乙個復合索引.

(3).如果單字段是主鍵或唯一字段,或者可選性非常高的字段,儘管約束條件比較固定,也不一定要建成復合索引,可建成單字段索引,降低復合索引開銷.

(4).在復合索引設計中,需首先考慮復合索引的第乙個設計原理:復合索引的字首性.即在sql語句中,只有將復合索引的第乙個字段作為約束條件,該復合索引才會啟用.

(5).在復合索引設計中,其實應考慮復合索引的可選性.即按可選性高低,進行復合索引欄位的排序.例如上述索引的字段排序順序為:納稅人識別號,稅務機關**,月份.

(6).如果條件涉及的字段不固定,組合比較靈活,則分別為月份,稅務機關**和納稅人識別號3個字段建立索引.

(7).如果是多表連線sql語句,注意是否可以在被驅動表(drived table)的連線欄位與該錶的其他約束條件欄位上建立復合索引.

(8).通過多種sql分析工具,分析執行計畫以量化形式評估效果.

oracle復合索引介紹 多欄位索引

首先,在大多數情況下,復合索引比單字段索引好.以稅務系統的sb zsxx 申報類 徵收資訊表 為例,該錶為稅務系統最大的交易表.如果分別按納稅人識別號,稅務機關 月份3個字段查詢,每個欄位在該表中的可選性或約束性都不強,如乙個納稅人識別號有很多納稅記錄,乙個稅務機關 和同一月份記錄就更多了,所以3個...

索引,復合索引

這裡只看btree索引,至於雜湊索引和全文索引本文暫不討論。前言 索引是有效使用資料庫的基礎,但你的資料量很小的時候,或許通過掃瞄整表來訪問資料的效能還能接受,但當資料量極大時,當訪問量極大時,就一定需要通過索引的輔助才能有效地訪問資料。一般索引建立的好壞是效能好壞的成功關鍵。使用innodb作為資...

復合索引 復合索引順序選擇問題

color red b 注意!在較高版本的oracle中不存在下述的問題!b color 復合索引第乙個原則 字首性 prefixing color red 復合索引的字首性是指只有當復合索引的第乙個字段出現在sql語句的謂詞條件中時,該索引才會被用到。如復合索引為 ename,job,mgr 只要...