什麼是oracle表分割區

2022-05-25 18:01:59

在oracle中,表分割區指的是當表中的資料不斷增大時,將表中的資料在物理上存放到多個表空間,也即將表進行分割區;表分割區能夠將表、索引或索引組織表進一步細分為段,這些資料庫物件的段叫做分割區,能夠改善可管理性、效能和可用性。

本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

什麼是oracle表分割區

分割區表:當表中的資料量不斷增大,查詢資料的速度就會變慢,應用程式的效能就會下降,這時就應該考慮對錶進行分割區。

表進行分割區後,邏輯上表仍然是一張完整的表,只是將表中的資料在物理上存放到多個表空間(物理檔案上),這樣查詢資料時,不至於每次都掃描整張表。

表分割區的具體作用

oracle的表分割區功能通過改善可管理性、效能和可用性,從而為各式應用程式帶來了極大的好處。通常,分割區可以使某些查詢以及維護操作的效能大大提高。此外,分割區還可以極大簡化常見的管理任務,分割區是構建千兆位元組資料系統或超高可用性系統的關鍵工具。

分割區功能能夠將表、索引或索引組織表進一步細分為段,這些資料庫物件的段叫做分割區。每個分割區有自己的名稱,還可以選擇自己的儲存特性。從資料庫 管理員的角度來看,一個分割區後的物件具有多個段,這些段既可進行集體管理,也可單獨管理,這就使資料庫管理員在管理分割區後的物件時有相當大的靈活性。但 是,從應用程式的角度來看,分割區後的表與非分割區表完全相同,使用 SQL DML 命令存取分割區後的表時,無需任何修改。

什麼時候使用分割區表,官方給的建議是:

  • a. 表的大小超過2GB。

  • b. 表中包含歷史資料,新的資料被增加到新的分割區中。

表分割區的優缺點

優點:

  • a.改善查詢效能:對分割區物件的查詢可以僅搜尋自己關心的分割區,提高檢索速度。

  • b.增強可用性:如果表的某個分割區出現故障,表在其他分割區的資料仍然可用。

  • c.維護方便:如果表的某個分割區出現故障,需要修復資料,只修復該分割區即可。

  • d.均衡I/O:可以把不同的分割區對映到磁碟以平衡I/O,改善整個系統效能。

缺點:

分割區表相關,已經存在的表沒有方法可以直接轉化為分割區表。不過oracle提供了線上重定義表的功能。

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

1 範圍分割區(range) maxvalue

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

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

a.每一個分割區都必須有一個VALUES LESS THEN子句,它指定了一個不包括在該分割區中的上限值。分割區鍵的任何值等於或者大於這個上限值的記錄都會被加入到下一個高一些的分割區中。

b.所有分割區,除了第一個,都會有一個隱式的下限值,這個值就是此分割區的前一個分割區的上限值。

c.如果某些記錄暫無法預測範圍,可以建立maxvalue分割區,所有不在指定範圍內的記錄都會被儲存到maxvalue所在分割區中。

例1:假設有一個test表,表中有資料200000行,我們將此表通過id進行分割區,每個分割區儲存100000行,我們將每個分割區儲存到單獨的表空間中,這樣資料檔案就可以跨越多個物理磁碟。下面是建立表和分割區的程式碼,如下:

----先建立多個測試表空間

sys@ORCL>create tablespace test_ts01 datafile '/home/oracle/test_01.dbf' size 32m extent management local autoallocate;
Tablespace created.
sys@ORCL>create tablespace test_ts02 datafile '/home/oracle/test_02.dbf' size 32m extent management local autoallocate;
Tablespace created.
sys@ORCL>create tablespace test_ts03 datafile '/home/oracle/test_03.dbf' size 32m extent management local autoallocate;
Tablespace created.

----建立test分割區表

create table test
(        id number not null,
         first_name varchar2(30) not null,
         last_name varchar2(30) not null,
         phone varchar2(30) not null,
         email varchar2(80),
         status char(1),
         constraint test_id primary key (id)
)
partition by range (id)
(        partition test_part1 values less than (100000) tablespace test_ts01,
         partition test_part2 values less than (200000) tablespace test_ts02,
         partition test_part3 values less than (maxvalue) tablespace test_ts03
);
以上就是什麼是oracle表分割區的詳細內容,更多請關注TW511.COM其它相關文章!