MySQL中的分区HASH分区
Posted 小石头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中的分区HASH分区相关的知识,希望对你有一定的参考价值。
HASH分区主要用来分散热点读,取保数据在预先确定个数的分区中尽可能的平均分布。 对一个表执行HASH分区时,mysql会对分区键应用一个散列函数,一次确定数据应该放在哪一个分区中。
MySQL分区支持两种HASH分区,常规HASH分区和线性HASH分区。
常规HASH使用的是取模算法,线性HASH使用的是线性2的幂运算。
CREATE TABLE emp2hash (id INT NOT NULL,
ename VARCHAR(30),
hired DATE NOT NULL DEFAULT \'1970-01-01\',
separated DATE NOT NULL DEFAULT \'9999-12-31\',
job VARCHAR(30) NOT NULL,store_id INT NOT NULL )
PARTITION BY HASH (store_id) PARTITIONS 4;
INSERT INTO emp2hash VALUES (1,\'Tom\',\'2010-10-10\',\'9999-12-31\',\'Clerk\',234);
EXPLAIN PARTITIONS SELECT * FROM emp2hash WHERE store_id = 234
如果要增加分区数量,取模算法是MOD(expr,X+1),原来分区中的数据几乎都要重新计算,所以常规分区在分区管理上代价太大,MySQL提供了线性HASH分区,来降低分区管理的代价。Linear hash 在分区维护(增加,删除,合并,拆分分区)时,MySQL能够处理的更加迅速,但是和常规HASH各分区之间的数据分布不太均衡。
CREATE TABLE emp2linehash(id INT NOT NULL,
ename VARCHAR(20),
hired DATE NOT NULL DEFAULT \'1970-01-01\',
separated DATE NOT NULL DEFAULT \'9999-12-31\',
job VARCHAR(30) NOT NULL,
store_id INT NOT NULL)
PARTITION BY LINEAR HASH (store_id) PARTITIONS 4;
常规分区时,保存数值A所在的分区,N(A)=MOD(A,num)=A&(num-1)
线性分区时,找到大于等于num的幂V=Power(2,ceiling(Log(2,num)));N=A&(num-1),仅以A 为非负整数为例。
以上是关于MySQL中的分区HASH分区的主要内容,如果未能解决你的问题,请参考以下文章