表分割槽的幾種型別及操作方法

2021-05-23 08:50:22 字數 4944 閱讀 2734

一.範圍分割槽:

範圍分割槽將資料基於範圍對映到每乙個分割槽,這個範圍是你在建立分割槽時指定的分割槽鍵決定的。這種分割槽方式是最為常用的,並且分割槽鍵經常採用日期。舉個例子:你可能會將銷售資料按照月份進行分割槽。

當使用範圍分割槽時,請考慮以下幾個規則:

1、每乙個分割槽都必須有乙個values less then子句,它指定了乙個不包括在該分割槽中的上限值。分割槽鍵的任何值等於或者大  於這個上限值的記錄都會被加入到下乙個高一些的分割槽中。

2、所有分割槽,除了第乙個,都會有乙個隱式的下限值,這個值就是此分割槽的前乙個分割槽的上限值。

3、在最高的分割槽中,maxvalue被定義。maxvalue代表了乙個不確定的值。這個值高於其它分割槽中的任何分割槽鍵的值,也可以理解為高於任何分割槽中指定的value less then的值,同時包括空值。

例一:

假設有乙個customer表,表中有資料200000行,我們將此表通過customer_id進行分割槽,每個分割槽儲存100000行,我們將每個分割槽儲存到單獨的表空間中,這樣資料檔案就可以跨越多個物理磁碟。下面是建立表和分割槽的**,如下:

create table customer

( customer_id number not null primary key,

first_name  varchar2(30) not null,

last_name   varchar2(30) not null,

phone        varchar2(15) not null,

email        varchar2(80),

status       char(1)

) partition by range (customer_id)

( partition cus_part1 values less than (100000) tablespace cus_ts01,

partition cus_part2 values less than (200000) tablespace cus_ts02 )

例二:按時間劃分

create table order_activities

( order_id      number(7) not null,

order_date    date,

total_amount number,

custotmer_id number(7),

paid           char(1)

) partition by range (order_date) (

partition ord_act_part01 values less than (to_date('01- may -2003','dd-mon-yyyy')) tablespaceord_ts01,

partition ord_act_part02 values less than (to_date('01-jun-2003','dd-mon-yyyy')) tablespace ord_ts02,

partition ord_act_part02 values less than (to_date('01-jul-2003','dd-mon-yyyy')) tablespace ord_ts03 )

例三:maxvalue

create table rangetable

( idd   int primary key ,

iname varchar(10),

grade int 

) partition  by  range (grade)

( partition  part1 values  less  then (1000) tablespace  part1_tb,

partition  part2 values  less  then (maxvalue) tablespace  part2_tb );

二.列表分割槽:

該分割槽的特點是某列的值只有幾個,基於這樣的特點我們可以採用列表分割槽。例一

create table problem_tickets

( problem_id   number(7) not null primary key,

description  varchar2(2000),

customer_id  number(7) not null,

date_entered date not null,

status       varchar2(20)

) partition by list (status)

( partition prob_active   values ('active') tablespace prob_ts01,

partition prob_inactive values ('inactive') tablespace prob_ts02 例二

create  table  listtable

( id    int  primary  key ,

name  varchar (20),

area  varchar (10)

) partition  by  list (area)

( partition  part1 values ('guangdong','beijing') tablespace  part1_tb,

partition  part2 values ('shanghai','nanjing')  tablespace  part2_tb

); )

三.雜湊分割槽:

這類分割槽是在列值上使用雜湊演算法,以確定將行放入哪個分割槽中。當列的值沒有合適的條件時,建議使用雜湊分割槽。

雜湊分割槽為通過指定分割槽編號來均勻分布資料的一種分割槽型別,因為通過在i/o裝置上進行雜湊分割槽,使得這些分割槽大小一致。

例一:

create table hash_table

( col number(8),

inf varchar2(100)

) partition by hash (col)

( partition part01 tablespace hash_ts01,

partition part02 tablespace hash_ts02,

partition part03 tablespace hash_ts03 )

簡寫:

create table emp

(empno number (4),

ename varchar2 (30),

sal   number

)partition by  hash (empno) partitions 8

store in (emp1,emp2,e***,emp4,emp5,emp6,emp7,emp8);

hash分割槽最主要的機制是根據hash演算法來計算具體某條紀錄應該插入到哪個分割槽中,hash演算法中最重要的是hash函式,oracle中如果你要使用hash分割槽,只需指定分割槽的數量即可。建議分割槽的數量採用2的n次方,這樣可以使得各個分區間資料分布更加均勻。

四.組合範圍雜湊分割槽

這種分割槽是基於範圍分割槽和列表分割槽,表首先按某列進行範圍分割槽,然後再按某列進行列表分割槽,分割槽之中的分割槽被稱為子分割槽。

create table sales (

product_id varchar2(5),

sales_date date,

sales_cost number(10),

status varchar2(20) )

partition by range(sales_date) subpartition by list (status) (

partition p1 values less than(to_date('2003-01-01','yyyy-mm-dd'))tablespace rptfact2009

( subpartition p1sub1 values ('active') tablespace rptfact2009,

subpartition p1sub2 values ('inactive') tablespace rptfact2009

), partition p2 values less than (to_date('2003-03-01','yyyy-mm-dd')) tablespace rptfact2009

( subpartition p2sub1 values ('active') tablespace rptfact2009,

subpartition p2sub2 values ('inactive') tablespace rptfact2009 ) )

五.復合範圍雜湊分割槽:

這種分割槽是基於範圍分割槽和雜湊分割槽,表首先按某列進行範圍分割槽,然後再按某列進行雜湊分割槽。

create table dinya_test

( transaction_id number primary key,

item_id number(8) not null,

item_description varchar2(300),

transaction_date date

) partition by range(transaction_date)subpartition by hash(transaction_id)  subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)

( partition part_01 values less than(to_date(『2006-01-01』,』yyyy-mm-dd』)),

partition part_02 values less than(to_date(『2010-01-01』,』yyyy-mm-dd』)),

partition part_03 values less than(maxvalue)

);

Oracle資料庫中分割槽表的操作方法

摘要 在大量業務資料處理的專案中,可以考慮使用分割槽表來提高應用系統的效能並方便資料管理,本文詳細介紹了分割槽表的使用。在大型的企業應用或企業級的資料庫應用中,要處理的資料量通常可以達到幾十到幾百gb,有的甚至可以到tb級。雖然儲存介質和資料處理技術的發展也很 快,但是仍然不能滿足使用者的需求,為了...

Oracle資料庫中分割槽表的操作方法

在大型的企業應用或企業級的資料庫應用中,要處理的資料量通常可以達到幾十到幾百gb,有的甚至可以到tb級。雖然儲存介質和資料處理技術的發展也很快,但是仍然不能滿足使用者的需求,為了使使用者的大量的資料在讀寫操作和查詢中速度更快,oracle提供了對錶和索引進行分割槽的技術,以改善大型應用系統的效能。使...

HTML中doctype的作用及幾種型別詳解

是乙個用於宣告當前html版本,用來告知web瀏覽器該文件使用是哪種 html 或者 xhtml 規範來解析頁面,以便瀏覽器更加準確的理解頁面內容,更加良好地展現內容效果!1.標籤沒有結束標籤 2.宣告被所有主流瀏覽器支援 3.宣告不是乙個html標籤,在html5中是可以不區分大小寫的 4.宣告必...