數據庫分區


 

概述

   數據分區主要目的是為了在特定的SQL操作中減少數據讀寫的總量以縮減響應時間。當表中的數據量不斷增大,查詢數據的速度就會變慢,應用程序的性能就會下降,這時就應該考慮對表進行分區。表進行分區后,邏輯上表仍然是一張完整的表,只是將表中的數據在物理上存放到多個表空間(物理文件上),這樣查詢數據時,不至於每次都掃描整張表。 

orcale的分區

  1.range分區:就是區域分區

在數據庫創建分區

CREATE TABLE TEST
(
    ID VARCHAR2(5),
    COUNT NUMBER(10,2),
   DATE TIMESTAMP ) PARTITION
BY RANGE (COUNT) ( PARTITION P1 VALUES TEST THAN (1000) TABLESPACE CUS_TS01, PARTITION P2 VALUES TEST THAN (2000) TABLESPACE CUS_TS02 )

select * from user_tab_partitions; --查詢所有分區情況
select * from TEST partition(p1); --查詢某表的某一分區數據

分區后,新增數據的COUNT字段如果小於1000就存儲到P1分區中,如果1000到2000存儲到P2分區中。

但是這時如果我們新增的一條數據的COUNT字段值大於2000,將無法存儲到表中。我們可以擴展分區,語法如下:

  alter table TEST add partition p4 values less than(maxvalue); --大於2000的都會存到此分區中,當然也可以增加更多的分區

刪除分區的語法如下:

  alter table TEST drop partition p4; --注意:刪除分區會把分區內已有的數據同時刪除

如果現在update分區p1中的COUNT值為1500,需要在update前增加以下語句:

  alter table TEST enable row movement; --使其row能移動

這樣再update就可以成功了

2.分區索引

  分區索引大體上分為兩大類,一類叫做local,一類叫做global。

  local:在每個分區上建立索引

  global:一種在全局上建立索引

創建語法

create index idx_count on TEST(count) local;--建立分區索引,在sale表的每個分區都建立了索引

select * from user_ind_partitions;--查詢所有分區索引情況

3.list分區

該分區的特點是某列的值只有幾個,基於這樣的特點我們可以采用列表分區。 

4.hash分區

這類分區是在列值上使用散列算法,以確定將行放入哪個分區中。當列的值沒有合適的條件時,建議使用散列分區。 
散列分區為通過指定分區編號來均勻分布數據的一種分區類型,因為通過在I/O設備上進行散列分區,使得這些分區大小一致。 

5.復合分區

這種分區是基於范圍分區和列表分區,表首先按某列進行范圍分區,然后再按某列進行列表分區,分區之中的分區被稱為子分區。 

6.間隔分區(工作中常用)

是一種分區自動化的分區,可以指定時間間隔進行分區,這是oracle11g的新特性,實際工作中很常用。實際上是由range分區引申的,最終實現了range分區的自動化

按月語法

create table interval_sale
(sid int,sdate timestamp)
partition by range(sdate)
interval (numtoyminterval(1,'DAY'))
(
partition p1 values less than (TIMESTAMP '2018-05-09 00:00:00.00')
)

 按天創建

create table interval_sale
(sid int,sdate timestamp)

partition by range(sdate)
interval (NUMTODSINTERVAL(1,'DAY'))
(
partition p20180509 values less than (TIMESTAMP '2018-05-09 00:00:00.00')
)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM