Range-Hash分区是一级分区为Range分区,二级分区为Hash分区的组合分区类型。
Range-Hash分区对于存储历史数据的大表很常见,并且经常与其他大表连接。对于这些类型的表(典型的数据仓库系统),组合Range-Hash分区提供了在Range级别进行分区修剪的优势,并有机会在Hash级别执行并行的全分区或部分分区连接。对于特定的SQL语句,特定的情况可以从两个维度上的分区修剪中受益。
组合Range-Hash分区还可以用于使用Hash分区的表,但需要使用滚动窗口的方法。随着时间的推移,数据可以从一个存储层移动到另一个存储层进行压缩,存储在只读表空间中并最终清除。信息生命周期管理场景通常使用Range分区来实现分层存储的方法。
以下示例为TPCH的orders
表采用Range-Hash分区:
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));
文档内容是否对您有帮助?