Oracle數據庫中分區表的操做方法

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);
相關文章
相關標籤/搜索