关于
Oracle哈希分区,这是来自Oracle帮助文档的一部分。
经过一些研究,Oracle实际上支持默认哈希分区的一致性哈希。虽然它是如何做到的是一个秘密并且没有公开。但它实际上利用了HashMap的方式,但隐藏了一些分区。因此,当您添加/删除分区时,Oracle需要调整不同分区中的数据的工作量非常少。该算法仅确保将数据均匀地分割为2的幂次方(例如4)的分区。因此,如果不是,则合并/拆分一些分区。
神奇的是,如果要从四个分区增加到五个分区,它实际上会将一个分区分成两个。如果要从四个分区减少到三个分区,它实际上会将两个分区合并成一个。
如果有人有更深入的见解,请提供更详细的答案。
哈希分区
哈希分区根据Oracle应用于您标识的分区键的哈希算法将数据映射到分区。哈希算法平均分配行到分区中,使分区大小大致相同。
哈希分区是在设备之间均匀分布数据的理想方法。哈希分区也是范围分区的易于使用的替代方法,特别是当要分区的数据不是历史数据或没有明显的分区键时。
注意:
您无法更改分区使用的哈希算法。
关于
MYSQL哈希分区,来自mysql帮助文档的一部分。
它提供了两个分区函数。一个是哈希分区,另一个是按键分区。
按键分区类似于哈希分区,不同之处在于哈希分区使用用户定义的表达式,而按键分区的哈希函数由MySQL服务器提供。MySQL Cluster使用
MD5()实现此目的;对于使用其他存储引擎的表,服务器使用其自己的内部哈希函数,该函数基于与
PASSWORD()相同的算法。CREATE TABLE ... PARTITION BY KEY的语法规则与创建哈希分区表的规则类似。
主要区别如下:
•使用KEY而不是HASH。
•KEY仅使用一个或多个列名的列表。从MySQL 5.1.5开始,如果表具有主键,则用作分区键的列或列必须包含表的主键的一部分或全部。
CREATE TABLE k1 (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20)
)
PARTITION BY KEY()
PARTITIONS 2;
如果没有主键但有唯一键,则使用唯一键作为分区键:
CREATE TABLE k1 (
id INT NOT NULL,
name VARCHAR(20),
UNIQUE KEY (id)
)
PARTITION BY KEY()
PARTITIONS 2;
然而,如果唯一键列未定义为 NOT NULL,则上述语句将失败。
但它并没有说明如何进行分区,需要查看代码。