分割槽索引和全域性索引(轉載)

zhanglei_itput發表於2010-04-07
在一個表的資料超過過2000萬條或佔用2G空間時,建議建立分割槽表。
  create table ta(
        c1 int,
        c2 varchar2(16),
        c3 varchar2(64),
        c4 int
        constraint pk_ta primary key (c1)
    ) partition by range(c1)(
      partition p1 values less than (10000000),
      partition p2 values less than (20000000),
      partition p3 values less than (30000000),
      partition p4 values less than (maxvalue)
    );

和:

  分割槽索引就是在所有每個區上單獨建立索引,它能自動維護,在drop或truncate某個分割槽時不影響該索引的其他分割槽索引的使用,也就是索引不會失效,維護起來比較方便,但是在查詢效能稍微有點影響。
  create idx_ta_c2 on ta(c2) (partition p1,partition p2,partition p3,partition p4); 或者 create index idx_ta_c2 on ta(c2) local ;
  另外在create unique index idx_ta_c2 on ta(c2) local ;
        系統會報ORA-14039錯誤,這是因為ta表的分割槽列是c1,不支援在分割槽表上建立PK主鍵時主鍵列不包含分割槽列,建立另外的約束(unique)也不可以。

  全域性索引就是在全表上建立索引,它可以建立自己的分割槽,可以和分割槽表的分割槽不一樣,也就是它是獨立的索引。
        在drop或truncate某個分割槽時需要重建索引alter index idx_xx rebuild
        也可以alter table table_name drop partition partition_name update indexes;實現,但是要花很長時間在重建索引上。
        可以透過查詢user_indexes、user_part_indexes和user_ind_partitions檢視來檢視索引是否有效。
  create index idx_ta_c3 on ta(c3) global; 
       分割槽表的不分割槽全域性索引就是一般表上的普通索引。

  或者把全域性索引分成多個區(注意和分割槽表的分割槽不一樣):
  create index idx_ta_c4 on ta(c4) global partition by range(c4)
       (partition ip1 values less than(10000),
        partition ip2 values less than(20000),
        partition ip3 values less than(maxvalue)
       );
  注意索引上的引導列要和range後列一致,否則會有ORA-14038錯誤。
        oracle會對主鍵自動建立全域性索引
  如果想在主鍵的列上建立分割槽索引,除非主鍵包括分割槽鍵,還有就是主鍵建在兩個或以上列上。


  在頻繁刪除表的分割槽且資料更新比較頻繁時為了維護方便避免使用全域性索引

參考文獻:http://space.itpub.net/11134237/viewspace-630424

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9252210/viewspace-631470/,如需轉載,請註明出處,否則將追究法律責任。

相關文章