平常開發中最經常使用的技術,主要針對於大數據量,頻繁查詢數據等需求oracle
oracle 提供了 7種分區,本文主要介紹較經常使用的幾種less
區域分區,分區的時候必須在建立表時指定函數
語法:大數據
create table (...) partition by range (filed) (partition r1 values less than (value)); # value 爲分區的依據,好比value=1000,即不超過1000的值都會存放在此分區, # 若是隻有一個分區,那麼大於1000的值便沒法插入。能夠指定value=maxvalue
查看分區狀況:code
全部分區的狀況,能夠經過 where 條件判斷索引
select * from user_table_partitions;
查看分區數據:ci
select * from table partition(r1);
修改分區:開發
addhash
alter table tablename add partition r2 values less than (maxvalue);
delit
alter table tablename drop partition r2;
跨分區操做
更新數據時不能夠跨分區操做,好比更新以後的內容要從1分區移動到2分區,那麼須要設置可移動的分區才能夠跨分區查詢,不然沒法操做。
alter table tablename enable row movement;
分區索引
分區以後雖然提升了查詢的效率,但僅僅是提升了數據的範圍,依然須要創建分區索引,進一步提升效率。
local; 在每一個分區創建索引
語法: create index index_name on table(field) local;
查看: select * from user_ind_partitions;
索引的字段必定是分區的字段
global; 全局索引
一種是全局創建索引,這種方式分不分區都同樣,不建議使用;
前綴索引
還有一種是自定義索引的區間的索引,即前綴索引
,這個是很是有意義的。
語法: 必須指定 maxvalue
create index index_name on table(field) global partition by range(filed) ( partition r1 values less than(value), partition r2 values less than(maxvalue) );
實現了均勻的負載值分配,增長 hash 分區能夠從新分配數據
創建
create table table_name (empno number,ename varchar(20)) partition by hash(empno) (partition p1, partition p2)
查看分區結構
select * from user_tab_partitions where table_name= "table_name";
查看分區數據
select * from table_name partition(p1);
建立
create table table_name ( empno number, ename varchar(20), city varchar(20) partition by list(city) ( partition east values("shanghai「) ) )
建立
create table table_name( sno number, sname varchar(20) ) partition by range (sno) subpartition by hash (sname) # 子分區 subpartition 4 # 子分區分紅4分 ( partition p1 values less than(1000), partition p2 values less than(maxvalue) )
是一種分區自動化的分區,能夠指定時間間隔分區,一直是 oracle 引覺得榮的一項技術
語法:
create table table_name ( sid int, sdata timestamp ) partition by range(sdata) interval ( numtoyminterval(1, "MONTH") # 函數,計算月份 ) ( partition p1 values less than (TIMESTAMP'2019-02-01 00:00:00') )
至關於在 2014-02-01 以前的數據,創建一個分區;
以後的數據每隔一個月創建一個分區。