首頁
云原生數(shù)據(jù)庫 PolarDB
云原生數(shù)據(jù)庫PolarDB MySQL版
用戶指南
分區(qū)表
分區(qū)選擇策略
何時(shí)選擇二級分區(qū)
何時(shí)使用Range-Hash分區(qū)
何時(shí)使用Range-Hash分區(qū)
更新時(shí)間:
Range-Hash分區(qū)是一級分區(qū)為Range分區(qū),二級分區(qū)為Hash分區(qū)的組合分區(qū)類型。
Range-Hash分區(qū)對于存儲歷史數(shù)據(jù)的大表很常見,并且經(jīng)常與其他大表連接。對于這些類型的表(典型的數(shù)據(jù)倉庫系統(tǒng)),組合Range-Hash分區(qū)提供了在Range級別進(jìn)行分區(qū)修剪的優(yōu)勢,并有機(jī)會(huì)在Hash級別執(zhí)行并行的全分區(qū)或部分分區(qū)連接。對于特定的SQL語句,特定的情況可以從兩個(gè)維度上的分區(qū)修剪中受益。
組合Range-Hash分區(qū)還可以用于使用Hash分區(qū)的表,但需要使用滾動(dòng)窗口的方法。隨著時(shí)間的推移,數(shù)據(jù)可以從一個(gè)存儲層移動(dòng)到另一個(gè)存儲層進(jìn)行壓縮,存儲在只讀表空間中并最終清除。信息生命周期管理場景通常使用Range分區(qū)來實(shí)現(xiàn)分層存儲的方法。
以下示例為TPCH的orders
表采用Range-Hash分區(qū):
CREATE TABLE `orders` (
`o_orderkey` int(11) NOT NULL,
`o_custkey` int(11) NOT NULL,
`o_orderstatus` char(1) DEFAULT NULL,
`o_totalprice` decimal(10,2) DEFAULT NULL,
`o_orderdate` date NOT NULL,
`o_orderpriority` char(15) DEFAULT NULL,
`o_clerk` char(15) DEFAULT NULL,
`o_shippriority` int(11) DEFAULT NULL,
`o_comment` varchar(79) DEFAULT NULL,
PRIMARY KEY (`o_orderkey`,`o_orderdate`,`o_custkey`),
KEY `o_orderkey` (`o_orderkey`),
KEY `i_o_custkey` (`o_custkey`),
KEY `i_o_orderdate` (`o_orderdate`)
) ENGINE=InnoDB
PARTITION BY RANGE COLUMNS(o_orderdate)
SUBPARTITION BY HASH (`o_custkey`)
SUBPARTITIONS 64
(PARTITION item1 VALUES LESS THAN ('1992-01-01'),
PARTITION item2 VALUES LESS THAN ('1993-01-01'),
PARTITION item3 VALUES LESS THAN ('1994-01-01'),
PARTITION item4 VALUES LESS THAN ('1995-01-01'),
PARTITION item5 VALUES LESS THAN ('1996-01-01'),
PARTITION item6 VALUES LESS THAN ('1997-01-01'),
PARTITION item7 VALUES LESS THAN ('1998-01-01'),
PARTITION item8 VALUES LESS THAN ('1999-01-01'),
PARTITION item9 VALUES LESS THAN (MAXVALUE));
文檔內(nèi)容是否對您有幫助?