[Oracle]分區索引

上一節學習了分區表,接着學習分區索引。html

(一)何時對索引進行分區 sql

· 爲了不移動數據時重建整個索引,可對索引分區,在重建索引時,只需重建與數據分區相關的索引; less

· 在對分區表進行維護時,爲了不整個表的索引處於不可用狀態,可將索引進行分區。當對分區表進行維護時,只需將該分區表的索引置爲不可用狀態,並不會影響到其它分區索引的使用; 學習

· 索引表的急劇增加致使索引條目的劇增,使得整個索引表很是大,影響索引速度,須要對索引分區; spa

(二)本地分區索引 htm

(1)本地分區索引是爲分區表中的各個分區建立單獨的索引分區,各個索引分區之間是相互獨立的,索引的分區與表的分區是一一對應的,一個分區表有幾個分區,就有幾個本地分區索引。當對本地分區表進行分區的添加、刪除、合併等操做時,系統會自動對分區索引進行維護,建立本地分區索引須要使用LOCAL關鍵字。 blog

image

        圖.分區表與本地分區索引一一對應 索引

(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)

結果以下:

image

(三)全局分區索引

(1)全局分區索引是對整個表創建索引,而後再對索引進行分區。索引的分區之間不是相互獨立的,索引分區與表分區也不是一一對應的關係。Oracle全局分區索引分區方法包括範圍分區(Range)和散列分區(Hash),全局分區須要使用GLOBAL關鍵字。

image

        圖.全局索引的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)
);

結果以下:

image

 

(4)維護分區索引

使用ALTER INDEX語句來維護索引分區

index1

 

(四)查看分區索引的信息

Oracle提供了數據字典來查看分區索引的信息

index2

相關文章
相關標籤/搜索