oracle按時間自動建立分割槽表

2021-08-19 21:19:00 字數 4494 閱讀 1848

oracle按時間自動建立分割槽表

2023年11月08日 15:48:30

閱讀數:5976

首先明確分割槽表和表分割槽的區別:表分割槽是一種思想,分割槽表示一種技術實現。當表的大小過g的時候可以考慮進行表分割槽,提高查詢效率,均衡io。oracle分割槽表是oracle資料庫提供的一種表分割槽的實現形式。表進行分割槽後,邏輯上仍然是一張表,原來的查詢sql同樣生效,同時可以採用使用分割槽查詢來優化sql查詢效率,不至於每次都掃瞄整個表

一、分割槽表基本操作

1、按時間分割槽表建立:

[sql] view plain copy

create table t_test (

pk_id number(30) not null,

add_date_time date,

constraintpk_t_test primary key (pk_id)

) partition by range (add_date_time)

( partitiont_test_2013_less values less than (to_date(『2013-01-01 00:00:00』,』yyyy-mm-ddhh24:mi:ss』)) tablespace ts_misps,

partitiont_test_2013 values less than (to_date(『2014-01-01 00:00:00』,』yyyy-mm-ddhh24:mi:ss』)) tablespace ts_misps,

partition t_test_2014values less than (to_date(『2015-01-01 00:00:00』,』yyyy-mm-dd hh24:mi:ss』))tablespace ts_misps

) 其中add_date_time為分割槽字段,每一年乙個分割槽。

插入100w資料

[sql] view plain copy

declare

i int := 1;

yearvarchar2(20);

begin

loop

year := casemod(i, 3)

when 0 then

『2012-01-14 12:00:00』

when 1 then

『2013-01-14 12:00:00』

else

『2014-01-14 12:00:00』

end;

insert into t_test values(i, to_date(year, 『yyyy-mm-dd hh24:mi:ss』));

exit when i= 1000000;

i := i + 1;

end loop;

end;

檢視分割槽表的分割槽的詳細資訊

[sql] view plain copy

select table_name,partition_name,high_value fromdba_tab_partitions where table_name=』t_test』;

2、分割槽表修改

2.1增加乙個分割槽

分兩種情況:1.沒有maxvalue分割槽。2.有maxvalue分割槽。我們建立的分割槽就是沒有maxvalue的分割槽

1.沒有maxvalue分割槽新增新分割槽:

[sql] view plain copy

alter table t_test add partition t_test_2015 valuesless than (to_date(『2015-01-01 00:00:00』,』yyyy-mm-dd hh24:mi:ss』)) tablespacets_misps ;

2、有maxvalue分割槽新增新分割槽:

有了maxvalue,就不能直接add partition,而是需要max分割槽split。例如我們將建立的分割槽的語句修改下:

[sql] view plain copy

create table t_test (

pk_id number(30) not null,

add_date_time date,

constraintpk_t_test primary key (pk_id)

) partition by range (add_date_time)

( partitiont_test_2013_less values less than (to_date(『2013-01-01 00:00:00』,』yyyy-mm-ddhh24:mi:ss』)) tablespace ts_misps,

partitiont_test_2013 values less than (to_date(『2014-01-01 00:00:00』,』yyyy-mm-ddhh24:mi:ss』)) tablespace ts_misps,

partitiont_test_2014 values less than (to_date(『2015-01-01 00:00:00』,』yyyy-mm-ddhh24:mi:ss』)) tablespace ts_misps,

partition t_test_maxvalues less than (maxvalue)

) 增加乙個2023年的分割槽語句為:

[sql] view plain copy

alter table t_test split partition t_test_max at(to_date(『2016-01-01 00:00:00』,』yyyy-mm-dd hh24:mi:ss』)) into (partitiont_test_2015,partition t_test_max);

2.2刪除乙個分割槽

[sql] view plain copy

alter table t_test drop partition t_test_2014

注:droppartition時,該分區內儲存的資料也將同時刪除,你的本意是希望刪除掉指定的分割槽但保留資料,你應該使用merge partition,執行該語句會導致glocal索引的失效需要重建全域性索引

2.3合併分割槽

相鄰的分割槽可以merge為乙個分割槽,新分割槽的下邊界為原來邊界值較低的分割槽,上邊界為原來邊界值較高的分割槽,原先的區域性索引相應也會合併,全域性索引會失效,需要rebuild。

[sql] view plain copy

alter table t_test merge partitions t_test_2013 ,t_test_2014 into partition t_test_2013_to_2014

二、對分割槽表進行查詢

2.1查詢

不使用分割槽查詢:預設查詢所有分割槽資料

[sql] view plain copy

select * from t_test

使用分割槽查詢:只查詢該分割槽資料

[sql] view plain copy

select * from t_testpartition(t_test_2014) where add_date_time >=to_date(『2014-01-01 00:00:00』,』yyyy-mm-dd hh24:mi:ss』);

2.1插入

[sql] view plain copy

insert into t_test values(i, to_date(year,』yyyy-mm-dd hh24:mi:ss』));

2.1刪除

使用分割槽刪除

更新的時候指定了分割槽,而根據查詢的記錄不在該分割槽中時,將不會刪除資料

[sql] view plain copy

delete t_test partition(t_test_2013) where id=1;

不使用分割槽刪除

[sql] view plain copy

delete t_test whereid=1;

2.1修改

使用分割槽更新

更新的時候指定了分割槽,而根據查詢的記錄不在該分割槽中時,將不會更新資料

[sql] view plain copy

delete t_test where id=1;

update t_test partition(t_test) set id=1 where id=2;

不使用分割槽

[sql] view plain copy

delete t_test where id=1;

update t_test set id=1 where id=2;

三、普通表和分割槽表互轉

普通表—>分割槽表

1、新建乙個字段一樣的中間的分割槽表(t_new)

2、將t資料匯入到t_new中

[sql] view plain copy

insert into t select field1,filed2, …from t

將老表重新命名

[sql] view plain copy

rename t to t_old;

將新錶重新命名

oracle按時間自動建立分割槽表

首先明確分割槽表和表分割槽的區別 表分割槽是一種思想,分割槽表示一種技術實現。當表的大小過g的時候可以考慮進行表分割槽,提高查詢效率,均衡io。oracle分割槽表是oracle資料庫提供的一種表分割槽的實現形式。表進行分割槽後,邏輯上仍然是一張表,原來的查詢sql同樣生效,同時可以採用使用分割槽查...

ORACLE 按時間建立分割槽表

有些專案中可能會涉及到表的分割槽 有的表大小在70g左右 下面簡單寫一下建立分割槽表過程 首先建立測試表weihai test語句如下 create table weihai test id int notnull,join date date 以上表中join date欄位為分割槽表字段 plsq...

oracle按時間建立分割槽表

首先明確分割槽表和表分割槽的區別 表分割槽是一種思想,分割槽表示一種技術實現。當表的大小過g的時候可以考慮進行表分割槽,提高查詢效率,均衡io。oracle分割槽表是oracle資料庫提供的一種表分割槽的實現形式。表進行分割槽後,邏輯上仍然是一張表,原來的查詢sql同樣生效,同時可以採用使用分割槽查...