对于分布规则不明显的数据,并没有明显的范围查找等特征,可以使用HASH分区,将数据分区列的值按照HASH算法打散到不同的分区上,将数据随机分布到各个分区。
使用HASH分区的目的如下:
使分区间数据分布均匀,分区间可以并行访问;
根据分区键使用分区修剪,基于分区键的等值查询开销减小;
随机分布数据,以避免I/O瓶颈。
分区键的选择一般要满足以下要求:
选择唯一或几乎唯一的列或列的组合;
为每个2的幂次分区创建多个分区和子分区。例如:2、4、8、16、32、64、128等。
示例:使用列c_custkey
作为分区键为表customer
创建4个HASH分区。
CREATE TABLE `customer` (
`c_custkey` int(11) NOT NULL,
`c_name` varchar(25) DEFAULT NULL,
`c_address` varchar(40) DEFAULT NULL,
`c_nationkey` int(11) DEFAULT NULL,
`c_phone` char(15) DEFAULT NULL,
`c_acctbal` decimal(10,2) DEFAULT NULL,
`c_mktsegment` char(10) DEFAULT NULL,
`c_comment` varchar(117) DEFAULT NULL,
PRIMARY KEY (`c_custkey`),
KEY `i_c_nationkey` (`c_nationkey`)
) ENGINE=InnoDB
PARTITION BY HASH(c_custkey)
( PARTITION p1,
PARTITION p2,
PARTITION p3,
PARTITION p4
);
指定HASH分区的数量将自动生成各个分区的内部名称。示例如下:
CREATE TABLE `customer` (
`c_custkey` int(11) NOT NULL,
`c_name` varchar(25) DEFAULT NULL,
`c_address` varchar(40) DEFAULT NULL,
`c_nationkey` int(11) DEFAULT NULL,
`c_phone` char(15) DEFAULT NULL,
`c_acctbal` decimal(10,2) DEFAULT NULL,
`c_mktsegment` char(10) DEFAULT NULL,
`c_comment` varchar(117) DEFAULT NULL,
PRIMARY KEY (`c_custkey`),
KEY `i_c_nationkey` (`c_nationkey`)
) ENGINE=InnoDB
PARTITION BY HASH (`c_custkey`)
PARTITIONS 64;
文档内容是否对您有帮助?