MySQL 8.0版本说明
MySQL 8.0源代码文档10bet官方网站
MySQL还支持线性哈希,它与常规哈希的不同之处在于,线性哈希利用的是线性的2次方算法,而常规哈希使用的是哈希函数值的模数。
在语法上,线性哈希分区与常规哈希之间的唯一区别是线性
关键字的分区的
子句,如下所示:
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 ' 99999-12-31 ', job_code INT, store_id INT)
给定一个表达式expr
,当使用线性哈希时,记录存储在其中的分区为分区号N
从全国矿工工会
分区,N
根据以下算法推导:
求大于2的下一个次幂
全国矿工工会
.我们称之为值V
;它可以计算为:V=权力(2、天花板(日志(2)全国矿工工会)))
(假设
全国矿工工会
是13岁。然后日志(13)
是3.7004397181411。天花板(3.7004397181411)
是4,V
=功率(2、4)
,等于16。)集
N
=F
(column_list
) & (V
- 1)。而
N
> =全国矿工工会
:集
V
=V
/ 2集
N
=N
& (V
- 1)
假设这个表t1
,使用线性哈希分区,有6个分区,使用以下语句创建:
CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR HASH(YEAR(col3))
现在假设您想要向其中插入两条记录t1
有col3
列值“2003-04-14”
而且“1998-10-19”
.第一个分区的分区号确定如下:
V= power (2, ceiling (log (2,6))) = 8N= year ('2003-04-14') & (8 -1) = 2003 & 7 = 3 (3 >= 6为FALSE:记录存储在分区#3中)
存储第二条记录的分区编号计算如下所示:
V= 8N= year ('1998-10-19') & (8 -1) = 1998 & 7 = 6 (6 >= 6为TRUE:需要额外的步骤)N= 6 & ((8 / 2) - 1) = 6 & 3 = 2 (2 >= 6为FALSE:记录存储在分区#2中)
使用线性散列进行分区的优点是,分区的添加、删除、合并和分割速度大大提高,这在处理包含大量(tb)数据的表时非常有益。缺点是,与使用常规哈希分区获得的分布相比,数据不太可能均匀地分布在分区之间。