關於Oracle的幾個分割槽

2021-08-23 12:52:12 字數 4045 閱讀 6702

oracle8i起,可以把乙個表中的所有行為分為幾個部分,這種表稱為分割槽表。

1)優點

改善表的查詢效能,因為這樣oracle可能只需搜尋乙個區(表的一部分)面不是整個表就可以完成查詢。

均衡i/o,可以把不同的分割槽對映到磁碟以平衡i/o,改善整個系統效能。

增強可用性,如果表的某個分割槽出現故障,表在其他分割槽的資料仍然可用

維護方便,如果表的某個分割槽出現故障,需要修復資料,只修復該分割槽即可

表更容易管理,因為分割槽表的資料存放在多個部分中,按分割槽載入各刪除資料比在大表中載入和刪除資料更容易

備份和恢復操作會執行得更好,分割槽比被分割槽的表要小,備份各恢復分割槽的方法要比備份各恢復整個表的方法多。

2)建立分割槽表

1>範圍分割槽

可以使用 create table 命令的 partition by range 子句:

create table bookshelf_range_part

(title varchar2(100) primary key,

publisher varchar2(20),

categoryname varchar2(20),

rating varchar2(2),

constraint catfk2 foreign key (categoryname) references category(categoryname)

partition by range(categoryname)

(partition part1 values less than('b') tablespace part1_ts,

partition part2 values less than(maxvalue) tablespace part2_ts));

maxvalue 指定了最後乙個分割槽交用來儲存在前面幾個分割槽不能儲存的資料。

可以建立多個分割槽,每個分割槽都有自己的上限值,對於每個分割槽來說,只需要指定最大值即可,範圍的最小值同 oracle 隱含含義。

2)雜湊分割槽

oracle8i 引入了雜湊分割槽,雜湊分割槽通過在分割槽鍵值-執行乙個雜湊函式來決定資料的物理位置。在範圍分割槽中,分割槽鍵值連續的值通常在相同的分割槽中,而雜湊分割槽中,連續的分割槽鍵值不一定分布在相同的分割槽中(一般均勻分布在不同的分割槽中):這樣在潛在地減少了i/o爭用的可能性。

create table bookshelf_hash_part

(title varchar2(100) primary key,

publisher varchar2(20),

rating varchar2(2),

constraint cartfk_hash foreign key(categoryname)

references category(categoryname)

partition by hash(categoryname) partitions 2 storein(part1_ts,part2_ts));

這各方法將建立 sys_pnnn 的名稱的分割槽,在storein語句中指定的表空間的資料目可以不同 partitiaons 中分割槽的數目。如果分割槽數目比指定的表空間數目多,分割槽將會以迴圈的方式分配到表空間中。

可以指定分割槽的表名:

partition by hash(categoryname)

(partition part1 tablespace part1_ts,

partition part2 tablespace part2_ts);

3>子分割槽

oracle8i起,可以建立分割槽的分割槽,即子分割槽。子分割槽把範圍分割槽和雜湊分割槽結合起來。

careate table bookshelf_range_hash_part

(title varchar2(100) primary key,

publisher varchar2(20),

categoryname varchar2(2),

rating varchar2(2),

constraint cartfk3 foreign key(categoryname) references category(categoryname)

partition by range(title)

subpartition by hash(categoryname)

subpartitions 6

(partition part1 values less than('m') tablespace part1_ts,

partition part2 values less than(maxvalue) tablespace part2_ts);

)

4>列表分割槽

從oracle9i起,可以使用列表分割槽。在列表分割槽中,告訴oracle所有可能的值,並將分割槽指定到插入相應行的分割槽。

create table booksheif_list_part

(title varchar2(100) primary key,

publisher varchar2(20),

categoryname varchar2(20),

rating varchar2(2),

constraint cartfk4 foreign key(categoryname) references category(categoryname)

partition by list(categoryname)

(partition part1 values ('adultfic','adultnf','adultref') tablespace part1_ts,

partition part2 values('childrenfic','childrennf','childrenpic') tablespace part1_ts));

在使用列表分割槽表時,如果insert到分割槽列的值不在分割槽的定義中,insert的操作將產生錯誤。

3)索引分割槽

1>區域性索引

索引可以按照表進行分割槽時所用的分割槽數來分割槽(局面部分區)。

create index bookshelf_list_category on bookshelf_list_part(categoryname) local

(partition part1 tablespace part1_ndx_ts,

partition part2 tablespace part2_ndx_ts);

2>全域性索引

可以使用global關鍵字建立包含多個分割槽值的全域性索引。

create index bookshelf_list_category on bookshelf_list_part(publisher) globa;

區域性索引比全域性索引容易管理,但全域性索引進行唯一性檢查的速度可能比區域性索引快。

全域性索引建立時 global 子句允許指定索引的範圍值,這個範圍值為索引欄位的範圍值:

create index dinya_idx_t on dinya_test(item_id)

global partition by range(item_id)

(partition idx_1 values less than(1000) tablespace dinya_space01,

partition idx_2 values less than(10000) tablespace dinya_space02,

partition idx_3 values less than(maxvalue) tablespace dinya_space03

);

不能為雜湊分割槽或子分割槽建立全域性索引。

有幾個關於分割槽的問題

有幾個關於分割槽的問題,希望大家幫忙了 1.表已經存在,能否再應運分割槽方案呢,如果可以,這麼用?2.sqlserver裡能否直接通過執行select into 表 from 表2時,也帶上分割槽方案,如果能這樣那是方便不過?可以 1 刪除普通索引 2 刪除主健索引並轉為分割槽表 3 再恢復主健索引...

有幾個關於分割槽的問題

有幾個關於分割槽的問題,希望大家幫忙了 1.表已經存在,能否再應運分割槽方案呢,如果可以,這麼用?2.sqlserver裡能否直接通過執行select into 表 from 表2時,也帶上分割槽方案,如果能這樣那是方便不過?可以 1 刪除普通索引 2 刪除主健索引並轉為分割槽表 3 再恢復主健索引...

關於oracle的幾個名詞

oracle sid oracld sid用於與作業系統互動,也就是說,從作業系統的角度訪問例項名,必須通過oracle sid。在win平台下,oracle sid還需存在於登錄檔中.在win平台下還有乙個比較混淆的服務中的.其實是指sid 資料庫網域名稱 在分布工資料庫系統中,不同版本的資料庫伺...