分區表

范圍分區 range
它將表中的數據根據某個列的值的范圍分布到不同的分區中。通常適用于具有連續數值或時間序列的數據
分區名自定義,可以用p1,p2,也可以用其他
分區字段必須在表中有定義, 每個分區的區間是前閉后開, 即最小值<=區間< 最大值
每個分區的最小值是上一個分區的最大值,相鄰分區的區值是連續的


列表分區list
?列表分區是根據列的值列表來分割數據的。每個分區包含一個或多個離散的列值,適用于數據基數小, 重復量大的情況. 各分區的值不用區分大小
插入數據時數據不在任何分區中會報錯, 可以設置一個默認分區,專門存放類似數據
.......
partition? 分區名 values (default)
散列分區/哈希分區 hash
語法2:
建表語句
partition by hash (字段)? partitions n
未指定分區名,數據庫會自動設置分區名, n是分區個數
可利用數據字典查看分區的相關信息: 比如多少個分區,分區名稱
SELECT * FROM ALL_TAB_PARTITIONS WHERE TABLE_NAME = UPPER('表名');
用于數據較少重復的, 以免數據傾斜
無需指定分區名, 數據庫會自動設置分區名
雖然可以通過查詢分區信息、查詢特定分區的數據或通過實驗驗證來了解哈希分區的數據分布情況,但是無法直接通過分區鍵的值來確定數據會被分配到哪個分區, 所以工作中不常用
間隔分區
oarcle 11g 版本新增的分區類型,? ?間隔分區(Interval Partitioning)是范圍分區(Range Partitioning)的一種特殊形式, 允許數據庫自動創建分區以適應數據增長, 只需定義一個分區,系統會根據定義自動添加分區
注意: 間隔分區不能執行增加分區的操作
?
時間間隔函數
用于將數字轉換為時間間隔類型
1. numtoyminterval? (n, 'year/month')
2.numtodsinterval (n, 'day/hour/minute/seconds')
通常用于日期計算或時間間隔操作
參考分區/引用分區
一個表的分區策略基于另一個表的分區鍵。這使得相關的表可以按照相同的邏輯進行分區,便于管理和維護, 這種分區方式特別適用于父子表關系,其中子表的分區與父表的分區保持一致
?子分區/復合分區
分區表可以進一步劃分為子分區(Subpartitioning),從而形成復合分區(Composite Partitioning),有時也稱為組合分區,混合分區
?
注意: 分區名稱不能重復, 不在同一個分區里的子分區名也不能重復
分區管理
刪除分區的寫法2: delete from 表名 partition (分區名);
清空分區/截斷分區(即刪除分區中的所有數據)
默認是?保留存儲空間。也就是說不寫明時,Oracle 會保留分區占用的存儲空間,以便后續可以重用這些空間來插入新數據
注意:
范圍分區新增分區時,只能在最后一個分區后面添加
哈希分區/散列分區一般不添加分區
刪除分區時, 如果只剩下一個分區, 不能刪除唯一的分區(因為數據會重新分布,且不知道刪除了哪些數據)
刪除分區和截斷分區都會把分區里面的數據刪除, 不同的是截斷分區的分區還在
合并分區
將多個分區合并為一個分區。合并分區通常用于優化存儲或簡化分區結構
注意: 確保合并操作不影響業務邏輯
索引維護:?合并分區后,全局索引可能會失效,需要使用?UPDATE INDEXES
?子句來維護索引
語法
ALTER TABLE sales
MERGE PARTITIONS p1, p2
INTO PARTITION p_merged
[UPDATE INDEXES];
合并操作會停止間隔分區的自動創建功能,直到新的分區范圍被定義。
對于參考分區/引用分區,如果父表的分區合并,子表的分區也會自動相應合并
拆分分區
把1個分區拆成2個或以上
范圍分區的拆分語法
?列表分區的拆分語法
ALTER TABLE table_name
SPLIT PARTITION partition_name
values (value)
INTO (PARTITION new_partition1,PARTITION new_partition2
);
第一個分區包含分區字段的值,即(value)
范圍分區和列表分區拆分語法的區別
范圍分區:? at (value)
列表分區: values(value)?
復合分區的拆分