如何将值插入Mysql哈希分区表?
我创建了一个mysql表,并对其进行了如下哈希分区如何将值插入Mysql哈希分区表?,mysql,hash,partitioning,Mysql,Hash,Partitioning,我创建了一个mysql表,并对其进行了如下哈希分区 mysql> CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated D
mysql> 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,
PRIMARY KEY(id)
)
PARTITION BY HASH(id)
PARTITIONS 10;
在成功创建表之后,我将值1(插入到store_id)插入到如下所示的表中
mysql>INSERT INTO employees (store_id) values (1);
现在我不明白1的这个值会变成什么?哪个分区(p0、p1、p2……p10)存储了\u id值1?我以为它会进入p0。但事实并非如此。看下面,我是这样检查的
mysql>SELECT TABLE_NAME, PARTITION_NAME, TABLE_ROWS, AVG_ROW_LENGTH,DATA_LENGTH FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME LIKE 'employees';
它显示了进入p1的值。请参见下文
mysql>
+------------+----------------+------------+----------------+-------------+
| TABLE_NAME | PARTITION_NAME | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH |
+------------+----------------+------------+----------------+-------------+
| employees | p0 | 0 | 0 | 16384 |
| employees | p1 | 1 | 16384 | 16384 |
| employees | p2 | 0 | 0 | 16384 |
| employees | p3 | 0 | 0 | 16384 |
| employees | p4 | 0 | 0 | 16384 |
| employees | p5 | 0 | 0 | 16384 |
| employees | p6 | 0 | 0 | 16384 |
| employees | p7 | 0 | 0 | 16384 |
| employees | p8 | 0 | 0 | 16384 |
| employees | p9 | 0 | 0 | 16384 |
+------------+----------------+------------+----------------+-------------+
我不知道为什么它被插入p1。再次测试它。。这次我插入了值2
mysql> INSERT INTO employees (store_id) values (2);
它已进入p2
+------------+----------------+------------+----------------+-------------+
| TABLE_NAME | PARTITION_NAME | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH |
+------------+----------------+------------+----------------+-------------+
| employees | p0 | 0 | 0 | 16384 |
| employees | p1 | 1 | 16384 | 16384 |
| employees | p2 | 1 | 16384 | 16384 |
| employees | p3 | 0 | 0 | 16384 |
| employees | p4 | 0 | 0 | 16384 |
| employees | p5 | 0 | 0 | 16384 |
| employees | p6 | 0 | 0 | 16384 |
| employees | p7 | 0 | 0 | 16384 |
| employees | p8 | 0 | 0 | 16384 |
| employees | p9 | 0 | 0 | 16384 |
+------------+----------------+------------+----------------+-------------+
为什么要将值插入不同的分区?散列分区是否遵循任何规则?有趣的是,它离开了p0,开始插入p1?解释?如果对您的MySQL版本的解释成立,分区号可以这样找到:MOD([您的输入],[分区数])
在您的情况下,第一行可能具有
id
=1,并且计算将是MOD(1,10)
=1。该行转到分区1(id
=2转到分区2)。谢谢您的回答。因此,在散列分区中,我们不能肯定地说插入的值在所有分区中平均分布。仪式在这个链接中,MOD的第一个参数是被除数,第二个参数是除数。如果股息小于除数会发生什么?示例MOD(2,7)?它将如何在所有分区中选择分区来存储值?提前谢谢:-)我在这里找到了答案。谢谢:-)关于均匀分布:你自己控制它。如果id
仅为1,11,21,31,41等,则仅填充分区1。但对于id列来说,这种情况可能很少发生。按哈希分区
没有提供我所知的性能优势。你希望得到什么?(乔恩的回答很好地回答了你的问题;我要指出,HASH
可能无论如何都是无用的。)