在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視頻教程》