ORACLE 分區索引

個人理解。

看了好幾天,終於差不多弄明白了。


分區表不能在現有表上面改,必須重建。可以RENAME OLD_TABLE,然後CREATE相同表名的分區表,COPY數據。

下面就開始建索引,這一步有點難度。而且必須謹慎。

對分區表可以分爲四種索引,全局不分區、全局分區、局部有前綴、局部無前綴。

決定使用哪種索引,要先分析所有相關的SQL,找出使用最頻繁的那幾條查詢語句。針對這些SQL,開始設計索引。


全局不分區索引:CREATE INDEX IND1 ON TB_NAME(COL_A) GLOBAL;這種跟最一般的索引可能分別不大或者就是一樣。不提。

全局分區索引:

TABLE表有四個列COL_A COL_B   COL_C   COL_D,COL_A爲分區列。

如果SQL如FROM TABLE WHERE COL_B=#B;使用很頻繁,這句查詢語句是進入不到分區的,那就考慮在COL_B上建全局分區索引。相對於全部不分區索引效率高。

局部有前綴索引:

如果SQL如FROM TABLE WHERE COL_A=#A AND COL_B=#B AND COL_C=#C;使用非常頻繁,可以考慮建局部有前綴索引,CREATE INDEX IND1 ON TABLE(COL_A,COL_B,COL_C) LOCAL;

這是複合索引,參考http://blog.chinaunix.net/uid-25557346-id-3243552.html

局部無前綴索引:

如果SQL如FROM TABLE WHERE COL_A=#A AND COL_B=#B;和FROM TABLE WHERE COL_A=#A AND COL_C=#C和FROM TABLE WHERE COL_A=#A AND COL_D=#D三種全部都使用頻繁,可以考慮在三個列上建無前綴索引,ON TABLE(COL_B) LOCAL;   ON TABLE(COL_C) LOCAL;   ON TABLE(COL_D) LOCAL;

當然如果改成三個有前綴索引,如ON TABLE(COL_A,COL_B) LOCAL;查詢效率會更高。但是索引維護開銷可能很大。


關於全局分區索引,應該叫建索引分區,跟表分區類似,指定一個分區列,跟那個表分區的分區列是兩碼事,然後指定列值的範圍,把這個列的全部索引樹分成幾部分,也就是索引分區。下次查詢的時候,就不用遍歷整個索引樹了。

------------------------------------------------------------------------------------------


LOCAL只有在分區表可以用。否則會報錯的。ORA-14...GLOBAL都可以用。
關於LOCAL本地索引:
如上,如果分區列爲COL_A,查詢條件包括COL_A時可以進入分區,否則仍然會全表掃描。
如果在COL_B建一個LOCAL無前綴索引,查詢條件如WHERE T.COL_B=...不包含COL_A時仍然全表掃描。
    如果WHERE T.COL_A=#A AND COL_B=#B,會先進入分區,在訪問COL_B索引,這種情況
    如果索引改爲前綴索引CREATE INDEX INDEX_NAME ON TABLE_NAME(COL_A,COL_B) LOCAL;效率會更高。
    有前綴和無前綴體現在這裏。

如果建立本地索引的時候,要建立的字段已經建立的全局索引,那建立這個索引的時候也要報錯,反之亦然:(全局分區不分區索引都會)
全局分區索引可以建在分區列和其他列上,沒有關係。
全局分區索引必須是前綴索引,指的是以全局分區索引使用的分區列爲前綴,而不是TABLE表的分區列。
可以建全局不分區索引。對此沒有前綴非前綴之分。


只有聯合索引纔有前綴無前綴的區別。
用分區列作聯合索引的第一項就是前綴索引,否則是非前綴索引。
前綴與非前綴的區別不在於效率,
而在於查詢條件中選擇性最好的字段是否是索引的前導列.
全局索引也爲全局非分區索引與全局分區索引,
全局非分區索引在進行跨分區掃描時很有優勢,
本地索引在單個分區內掃描時很有優勢.


參考

http://blog.chinaunix.net/uid-25557346-id-3243552.html
http://www.examw.com/oracle/jishu/187007/
http://www.itpub.net/thread-429282-3-1.html
http://blog.csdn.net/robinson1988/article/details/5276924
http://zhidao.baidu.com/question/424294866.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章