下文内容主要给大家带来MySQL 分区之 HASH分区详解,这里所讲到的知识,与书籍略有不同,都是创新互联专业技术人员在与用户接触过程中,总结出来的,具有一定的经验分享价值,希望给广大读者带来帮助。
创新互联建站是一家集网站建设,太康企业网站建设,太康品牌网站建设,网站定制,太康网站建设报价,网络营销,网络优化,太康网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
hash分区是使用主键去确保数据均匀分布在一个预先确定数字的分区上. 在range 或list分区中. 你必须显式的指定给出的数据写入哪个分区或设置一个列值去保存; 在hash分区中. Mysql已经为你准备的. 你只需要指定一个列的值或表达式基于列值去hash和分区的数字在哪个分区表中.
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY HASH(store_id)
PARTITIONS 4;
如果不包含PARTITIONS, 那么默认为1个分区
使用日期分区
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY HASH( YEAR(hired) )
PARTITIONS 4;
expr 必须是非恒量的数, 非随机的数, 就是数字是不同的, 但是是可以确定的。
如何确定一条数据的分区呢?先创建一个表
CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE)
PARTITION BY HASH( YEAR(col3) )
PARTITIONS 4;
如果你插入一条记录到T1的col3值为“2005-09-15 ',然后分配其存储决定如下:
MOD(YEAR('2005-09-01'),4)
= MOD(2005,4)
= 1
线性hash分区使用一个线性的2的幂运算法则
REATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY LINEAR HASH( YEAR(hired) )
PARTITIONS 4;
给定的一个表达式expr,分区中的记录存储在线性散列使用分区数n在Num的分区,其中n是根据下面的算法推导:
发现大于2的数我们称这种价值V下的力量;它可以计算为:
V = POWER(2, CEILING(LOG(2, num)))
(假设数字为13)。然后LOG(2,13)是3.7004397181411。CEILING(3.7004397181411)是4,和V =功率(2,4),这是16。)
N >= num:
在线性哈希分区的好处是增加,下降,合并,拆分分区可以更快,有利于在处理含有非常大量的数据表(百万兆字节)。缺点是,与常规哈希分区获得的分布相比,分区之间不太可能均匀分布数据.
对于以上关于Mysql 分区之 HASH分区详解,如果大家还有更多需要了解的可以持续关注我们创新互联的行业推新,如需获取专业解答,可在官网联系售前售后的,希望该文章可给大家带来一定的知识更新。