何時選擇HASH分區(qū)
更新時間:
對于分布規(guī)則不明顯的數(shù)據(jù),并沒有明顯的范圍查找等特征,可以使用HASH分區(qū),將數(shù)據(jù)分區(qū)列的值按照HASH算法打散到不同的分區(qū)上,將數(shù)據(jù)隨機(jī)分布到各個分區(qū)。
使用HASH分區(qū)的目的如下:
使分區(qū)間數(shù)據(jù)分布均勻,分區(qū)間可以并行訪問;
根據(jù)分區(qū)鍵使用分區(qū)修剪,基于分區(qū)鍵的等值查詢開銷減小;
隨機(jī)分布數(shù)據(jù),以避免I/O瓶頸。
分區(qū)鍵的選擇一般要滿足以下要求:
選擇唯一或幾乎唯一的列或列的組合;
為每個2的冪次分區(qū)創(chuàng)建多個分區(qū)和子分區(qū)。例如:2、4、8、16、32、64、128等。
示例:使用列c_custkey
作為分區(qū)鍵為表customer
創(chuàng)建4個HASH分區(qū)。
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分區(qū)的數(shù)量將自動生成各個分區(qū)的內(nèi)部名稱。示例如下:
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;
文檔內(nèi)容是否對您有幫助?