分區表分區索引和全局索引
在一個表的數據超過過萬條或占用G空間時建議建立分區表
create table ta(c intc varchar()c varchar()c int constraint pk_ta primary key (c)) partition by range(c)(partition p values less than ()partition p values less than ()partition p values less than ()partition p values less than (maxvalue));
分區索引和全局索引
分區索引就是在所有每個區上單獨創建索引它能自動維護在drop或truncate某個分區時不影響該索引的其他分區索引的使用也就是索引不會失效維護起來比較方便但是在查詢性能稍微有點影響
create index idx_ta_c on ta(c) local (partition ppartition ppartition ppartition p); 或者 create index idx_ta_c on ta(c) local ;
另外在create unique index idx_ta_c on ta(c) local ;系統會報ORA錯誤這是因為ta表的分區列是coracle不支持在分區表上創建PK主鍵時主鍵列不包含分區列創建另外的約束(unique)也不可以
全局索引就是在全表上創建索引它可以創建自己的分區可以和分區表的分區不一樣也就是它是獨立的索引在drop或truncate某個分區時需要創建索引alter index idx_xx rebuild也可以alter table table_name drop partition partition_name update global indexes;實現但是要花很長時間在重建索引上可以通過查詢user_indexesuser_part_indexes和user_ind_partitions視圖來查看索引是否有效
create index idx_ta_c on ta(c);
或者把全局索引分成多個區(注意和分區表的分區不一樣)
create index idx_ta_c on ta(c) global partition by range(c)(partition ip values less than()partition ip values less than()partition ip values less than(maxvalue));
注意索引上的引導列要和range後列一致否則會有ORA錯誤
oracle會對主鍵自動創建全局索引
如果想在主鍵的列上創建分區索引除非主鍵包括分區鍵還有就是主鍵建在兩個或以上列上
在頻繁刪除表的分區且數據更新比較頻繁時為了維護方便避免使用全局索引
From:http://tw.wingwit.com/Article/program/Oracle/201311/16543.html