散列分区是使用主键去确保数据均匀分布在一个预先确定数字的分区上。在范围或分列表区中。你必须显式的指定给出的数据写入哪个分区或设置一个列值去保存;在散列分区中。Mysql已经为你准备的。你只需要指定一个列的值或表达式基于列值去散列和分区的数字在哪个分区表中。
<代码>创建表员工( ,,INT id不空, ,帧VARCHAR (30), ,,lname VARCHAR (30), ,,雇用日期NOT NULL默认& # 39;1970 - 01 - 01 & # 39;, ,,分离NOT NULL默认日期& # 39;9999 - 12 - 31日& # 39;, ,job_code INT, ,,store_id INT ) 分区通过散列(可以) 分区4;代码>
如果不包含分区,那么默认为1个分区
<代码>使用日期分区代码>
<代码>创建表员工( ,,INT id不空, ,帧VARCHAR (30), ,,lname VARCHAR (30), ,,雇用日期NOT NULL默认& # 39;1970 - 01 - 01 & # 39;, ,,分离NOT NULL默认日期& # 39;9999 - 12 - 31日& # 39;, ,job_code INT, ,,store_id INT ) 由散列分区(一年(雇佣)) 分区4;代码>
expr必须是非恒量的数,非随机的数,就是数字是不同的,但是是可以确定的。
如何确定一条数据的分区呢?先创建一个表
<代码> CREATE TABLE t1 (col1 INT, col2 CHAR (5), col3日期) ,,由哈希分区(col3)(年) ,,分区4;代码>
如果你插入一条记录到T1的col3值为“2005-09-15 & # 39;,然后分配其存储决定如下:
<代码>国防部(年(& # 39;2005 - 09 - 01 & # 39;),4)=,国防部(2005 4)=,1 代码>
1。线性散列分区
线性散列分区使用一个线性的2的幂运算法则
<代码>列阿特表员工( ,,INT id不空, ,帧VARCHAR (30), ,,lname VARCHAR (30), ,,雇用日期NOT NULL默认& # 39;1970 - 01 - 01 & # 39;, ,,分离NOT NULL默认日期& # 39;9999 - 12 - 31日& # 39;, ,job_code INT, ,,store_id INT ) 由线性散列分区(一年(雇佣)) 分区4;代码>
给定的一个表达式expr,分区中的记录存储在线性散列使用分区数n在Num的分区,其中n是根据下面的算法推导:
- <李>
发现大于2的数我们称这种价值V下的力量,它可以计算为:
<代码> V=权力(2、天花板(日志(2,Num))) 代码>
(假设数字为13),然后日志(2、13)是3.7004397181411.CEILING(3.7004397181411)是4,和V=功率(2、4),这是16。)
李> <李> n=F (column_list),李(V - 1)。> <李>N祝辞=num:
李> <李>集合V=V/2组李> <李> N=N,李(V - 1) >在线性哈希分区的好处是增加,下降,合,并拆分分区可以更快,有利于在处理含有非常大量的数据表(百万兆字节)。缺点是,与常规哈希分区获得的分布相比,分区之间不太可能均匀分布数据。
<人力资源/>