分區表概述



分區:將一個表和一個索引物理上分解爲更小、更容易管理。邏輯上是一個表或者一個索引。物理上分割成多個分區,每個分區是一個獨立的段(對象),可以獨自處理,也可以作爲一個大對象獨立處理。

分區作用:

1、提高數據庫可用性:

分區中的某一個或者幾個分區不可用,並不意味着其他分區不可用

drop table t cascade constraint;
create table t (id number,name varchar2(20))
partition by hash(name)
(partition part1 tablespace learn,
partition part2  tablespace example);
insert into t select level, to_char(level) from dual connect by level<1000 ;
commit;
select * from t partition(part1);
select * from t  partition(part2);
alter tablespace learn offline;
select * from t partition(part1);---part1的表空間脫機 不能查詢
select * from t where name=3;---這個查詢因爲沒有提示oracle優化器name屬於part2,所以oracle直接在查看分區情況,最後導致無法查詢
select * from t partition(part2) where name=3;---這個查詢告訴了oracle優化器使用那個分區
但是有些文檔說select * from t where name=3優化器會根據3這個鍵值所在的分區,直接消除了分區part1,所以能夠查詢,我測試的數據庫版本Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

出錯時,減少停機時間,因爲只需要恢復不可用分區,不需要整個大對象進行恢復。


2、去掉大段管理,小段更容易管理

現在只需要一個個小分區進行管理不需要一個大對象進行管理,從而速度更快、佔用資源更少。

對於索引:rebuild時,對每一個分區進行重建,這樣需要臨時空間爲僅僅是分區的大小,而大對象所要的臨時空間則是整個大對象的大小,速度更慢,中途停電什麼的 ,一切重頭開始。

對於表來說做moe操作時,相同問題。alter table t move partition part2;

對於大量分區的表

begin
 for x in (select  distinct t.partition_name from dba_tab_partitions t ,dba_data_files t1    
                  where t.table_name=upper('t') and t.table_owner=user and 
                  t.tablespace_name=t1.tablespace_name 
                  and t1.online_status='ONLINE') loop
                 execute immediate 'alter table t move partition '||x.partition_name;
                 end loop;
end;

3、改善查詢性能

4、可以把修改分佈到多個獨立的分區上,從而減少大容量OLTP系統競爭。


分區類型:

1、區間分區

2、散列分區

3、列表分區

4、間隔分區:這個與區間分區非常相似,區別在於數據庫自己可以創建分區

5、引用分區:允許在由外鍵強制的父/子關係中的子表繼承父表的機制,實際就是允許子表依據父表中的字段對子表進行分區。

6、組合分區:區間分區和散列分區組合、區間分區和列表分區組合



















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