上一節學習了分區表,接着學習分區索引。html
(一)何時對索引進行分區 sql
· 爲了不移動數據時重建整個索引,可對索引分區,在重建索引時,只需重建與數據分區相關的索引; less
· 在對分區表進行維護時,爲了不整個表的索引處於不可用狀態,可將索引進行分區。當對分區表進行維護時,只需將該分區表的索引置爲不可用狀態,並不會影響到其它分區索引的使用; 學習
· 索引表的急劇增加致使索引條目的劇增,使得整個索引表很是大,影響索引速度,須要對索引分區; spa
(二)本地分區索引 htm
(1)本地分區索引是爲分區表中的各個分區建立單獨的索引分區,各個索引分區之間是相互獨立的,索引的分區與表的分區是一一對應的,一個分區表有幾個分區,就有幾個本地分區索引。當對本地分區表進行分區的添加、刪除、合併等操做時,系統會自動對分區索引進行維護,建立本地分區索引須要使用LOCAL關鍵字。 blog
圖.分區表與本地分區索引一一對應 索引
(2)本地分區索引的優勢: ip
l 若是須要對一個表分區進行維護,則受影響的只是與之關聯的索引; get
l 重建某個索引分區,其它分區不會受到影響;
l 本地分區索引支持單一分區數據的裝入和卸出;
l 本地分區索引採用與分區表相同的分區方法,有利於生成高效的查詢計劃;
l 本地分區索引簡化了表空間的不徹底恢復,在恢復分區/子分區的時候同時恢復對應的分區索引。
(3)爲分區表建立本地分區索引
CREATE INDEX index_name ON partition_table_name(column) LOCAL;
例子1.爲sales_by_list建立分區索引sales_by_index
CREATE INDEX sales_by_index ON sales_by_list(province)
結果以下:
(三)全局分區索引
(1)全局分區索引是對整個表創建索引,而後再對索引進行分區。索引的分區之間不是相互獨立的,索引分區與表分區也不是一一對應的關係。Oracle全局分區索引分區方法包括範圍分區(Range)和散列分區(Hash),全局分區須要使用GLOBAL關鍵字。
圖.全局索引的4種狀況
(2)爲分區表建立全局分區索引,主要有2步:建立全局索引和對全局索引進行分區,語法爲:
CREATE INDEX index_name ON [partition]_table_name(column) --建立全局索引 GLOBAL PARTITION BY Range(column) --以Range方式爲例,對索引表進行分區 ( PARTITION partition VALUES LESS THAN() TABLESPACE tablespace, … );
例子2.爲sale_by_range建立全局分區索引
/*爲sales_by_range表建立全局分區索引*/ create index sale_by_range_index on sale_by_range(time_id) global partition by range(time_id) ( partition sales_by_range_index_1 values less than(to_date('2012-1-1','yyyy-mm-dd')), partition sales_by_range_index_2 values less than(to_date('2012-4-5','yyyy-mm-dd')), partition sales_by_range_index_3 values less than(maxvalue) );
結果以下:
(4)維護分區索引
使用ALTER INDEX語句來維護索引分區
(四)查看分區索引的信息
Oracle提供了數據字典來查看分區索引的信息