1、爲何要作分區表?sql
當數據量很是大,好比幾百GB或是到T的時候。那查詢的速度可想而知,Oracle提供了對錶和索引進行分區的技術,以改善大型應用系統的性能。 數據庫
使用分區的優勢:
·加強可用性:若是表的某個分區出現故障,表在其餘分區的數據仍然可用;
·維護方便:若是表的某個分區出現故障,須要修復數據,只修復該分區便可;
·均衡I/O:能夠把不一樣的分區映射到磁盤以平衡I/O,改善整個系統性能;
·改善查詢性能:對分區對象的查詢能夠僅搜索本身關心的分區,提升檢索速度。
Oracle數據庫提供對錶或索引的分區方法有三種:
·範圍分區 ·Hash分區(散列分區) ·複合分區 less
2、下邊分別對三種分區方法做操做
性能
爲了方便,先創建三個表空間測試
create tablespace test1 datafile 'd:/分區test/test1.dnf' size 50M; create tablespace test2 datafile 'd:/分區test/test2.dnf' size 50M; create tablespace test3 datafile 'd:/分區test/test3.dnf' size 50M;
1.範圍分區
spa
1.1根據序號進行分區建表code
SQL> create table fenqutest( 2 id number, 3 name varchar2(50) 4 ) 5 partition by range(id) 6 (partition part1 values less than(5) tablespace test1, 7 partition part2 values less than(10) tablespace test2, 8 partition part3 values less than(maxvalue) tablespace test3);
這是我本身的作的小測試,很簡寫。對象
那麼當表建完了,數據也添加好了,怎麼來查看某個數據在哪張表裏呢?索引
很簡單:select * from fenqutest partition(part1);hash
1.2根據日期進行分區建表
SQL> create table fenqutest( id number, time_test date, name varchar2(50) ) partition by range(time_test) (partition part1 values less than(to_date(’2011-02-27’,’yyyy-mm-dd’)) tablespace test1, partition part2 values less than(to_date(’2014-02-28’,’yyyy-mm-dd’)) tablespace test2, partition part3 values less than(maxvalue) tablespace test3);
固然你也能夠根據別的來分區
2.Hash分區(散列分區)
散列分區爲經過指定分區編號來均勻分佈數據的一種分區類型,由於經過在I/O設備上進行散列分區,使得這些分區大小一致
SQL> create table fenqutest( id number, time_test date, name varchar2(50) ) partition by hash(id) (partition part1 tablespace test1, partition part2 tablespace test2, partition part3 tablespace test3);
3.複合分區
有時候咱們須要根據範圍分區後,每一個分區內的數據再散列地分佈在幾個表空間中,這樣咱們就要使用複合分區。複合分區是先使用範圍分區,而後在每一個分區內再使用散列分區的一種分區方法
SQL> create table fenqutest( id number, time_test date, name varchar2(50) ) partition by range(time_test) subpartition by hash(id) subpartitions 3 store in (test1,test2,test3) (partition part1 values less than(to_date(’2011-02-27’,’yyyy-mm-dd’)) tablespace test1, partition part2 values less than(to_date(’2014-02-28’,’yyyy-mm-dd’)) tablespace test2, partition part3 values less than(maxvalue) tablespace test3);