orcle 分區表創建、查詢、知識總結

1.orcle 10g 創建分區表不能自動創建,

如果想自動根據時間創建分區表需要

寫腳本自動增加partition

CREATE TABLE jcsj_sssj (  
  tagname VARCHAR2(128), 
  tagvalue VARCHAR2(128), 
  timetamp DATE  
) 
PARTITION BY RANGE (timetamp) 
(
  PARTITION P0 VALUES LESS THAN (TO_DATE('11-2-2017', 'dd-mm-yyyy')),
  PARTITION P1 VALUES LESS THAN (TO_DATE('21-2-2017', 'dd-mm-yyyy')),
  PARTITION P2 VALUES LESS THAN (TO_DATE('1-3-2017', 'dd-mm-yyyy')),
  PARTITION P3 VALUES LESS THAN (TO_DATE('11-3-2017', 'dd-mm-yyyy')),
  PARTITION P4 VALUES LESS THAN (TO_DATE('21-3-2017', 'dd-mm-yyyy')),
  PARTITION P5 VALUES LESS THAN (TO_DATE('1-4-2017', 'dd-mm-yyyy')),
  PARTITION P6 VALUES LESS THAN (TO_DATE('11-4-2017', 'dd-mm-yyyy')),
  PARTITION P7 VALUES LESS THAN (TO_DATE('21-4-2017', 'dd-mm-yyyy')),
  PARTITION P8 VALUES LESS THAN (TO_DATE('1-5-2017', 'dd-mm-yyyy')),
  PARTITION P9 VALUES LESS THAN (TO_DATE('11-5-2017', 'dd-mm-yyyy')),
  PARTITION P10 VALUES LESS THAN (TO_DATE('21-5-2017', 'dd-mm-yyyy'))
)
alter table jcsj_sssj add constraints jcpk primary key (timetamp,tagname);--創建聯合主鍵,會生成索引,提高查詢速度

2.orcle11g 創建分區表自動根據每天創建分區表從2011-1-1號以後

CREATE TABLE jcsj_sssj (  
  tagname VARCHAR2(128), 
  tagvalue VARCHAR2(128), 
  timetamp DATE
) 
PARTITION BY RANGE (timetamp) 
INTERVAL(NUMTOYMINTERVAL(1, 'day')) --自動創建語句
(
  PARTITION P0 VALUES LESS THAN (TO_DATE('1-1-2011', 'dd-mm-yyyy'))
);
   根據年: INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
   根據月: INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))
   根據天: INTERVAL(NUMTODSINTERVAL(1,'DAY'))

3.分區操作

1. 通過as select建立分區表 
createtable t1_trans_2 
      partitionbyrange (polno) 
      (partition part_01 valueslessthan(10000) tablespace users,         partition part_02 valueslessthan(maxvalue) tablespace wxq_tbs) 
Asselect * from lcpol; 
2查找某分區數據      
select * from t1_transpartition(part_01);
3操作某分區數據      
delete t1_transpartition(part_01);    
 注:當數據量很大的時候,指定分區會大大提高效率

4.分區表維護 

1. 刪除分區 
    Altertable t1_transdroppartition part_02;     注:刪除分區會自動刪除分區中的所有數據。 
2. 截斷分區 
ALTERTABLE t1_trans TRUNCATEPARTITION P1; 
注:截斷某個分區是指刪除某個分區中的數據,並不會刪除分區,也不會刪除其它分區中的數據。當表中即使只有一個分區時,也可以截斷該分區。 
3. 添加分區 
    Altertable t1_trans 
    addpartition part_02 valueslessthan(20000) tablespace users;     注:添加時不能在兩個範圍內插入分區,必須要大於最後一個分區的最大值。 
4. 合併分區 
    altertable t1_trans 
    mergepartitions part_01,part_02 intopartition part_new; 
注:合併分區是將相鄰的分區合併成一個分區,結果分區將採用較高分區的界限,值得注意的是,不能將分區合併到界限較低的分區。 
5. 分裂分區 
Altertable t1_transsplitpartition part_02 at (20000) into (partition part_02,partition part_03); 
6. 改換分區所屬tablespace 
    altertable t1_trans 
    movepartition part_03 tablespace wxq_tbs; 
7. 重命名分區表名 
ALTERTABLEt1_trans RENAMEPARTITION P21 TO P2; 
8. 查看錶分區情況 
SELECT * FROMUSER_TAB_PARTITIONS WHERE TABLE_NAME=upper('jcsj_sssj')
Upper():使列不區分大小寫,已返回所有的結果
會出現分區統計和實際查詢條數不對應情況,這是orcle滯後統計機制,如果想要詳細研究請學習
9. select table_name, partition_name, HIGH_VALUE from dba_tab_partitionst  wheretable_name = 'TEST_INTERVAL';

5.分區表注意事項

1.建立主鍵會生成索引,通過索引會查詢條件,提高查詢效率。
2.不能把分區字段做計算(比如to_char),否則會引起分區裁剪失效
3.對索引字段做計算也會引起索引失效
 
1、對分區表進行了計算,就只能走全表了;
2、如果建立索引,儘可能的建立分區索引,而不是全局索引,當然還要看具體情況;
3、減少隱性的數據轉換,否則,分區裁剪和索引也會失效,還會增加 CPU 負擔;
4、在最常用的列上做分區,這個要在設計初期就定好,後期更新會很麻煩;

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