千家信息网

MySQL中如何创建Key分区表

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇文章为大家展示了MySQL中如何创建Key分区表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。按照KEY进行分区类似于按照HASH分区,除了HASH分区使
千家信息网最后更新 2025年11月07日MySQL中如何创建Key分区表

本篇文章为大家展示了MySQL中如何创建Key分区表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

按照KEY进行分区类似于按照HASH分区,除了HASH分区使用的用户定义的表达式,而KEY分区的 哈希函数是由MySQL 服务器提供。MySQL 簇(Cluster)使用函数MD5()来实现KEY分区;
对于使用其他存储引擎的表,服务器使用其自己内部的 哈希函数,这些函数是基于与PASSWORD()一样的运算法则。
Key分区与Hash分区很相似,只是Hash函数不同,定义时把Hash关键字替换成Key即可,同样Key分区也有对应与线性Hash的线性Key分区方法。

语法为PARTITION BY LINEAR KEY(列名)

创建key分区表举例如下:

mysql> CREATE TABLE `dsf_data` (
-> `id` bigint(20) NOT NULL AUTO_INCREMENT,
-> `SH` varchar(32) DEFAULT NULL COMMENT '税号',
-> `KPJH` varchar(32) DEFAULT NULL COMMENT '开票机号',
-> `ZFJH` varchar(32) DEFAULT NULL COMMENT '主分机号',
-> `MONTH` varchar(10) DEFAULT NULL,
-> `STATUS` varchar(255) DEFAULT NULL COMMENT '解析状态标识',
-> `CREATE_TIME` datetime DEFAULT NULL COMMENT '插入时间',
-> `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新时间',
-> `FP_DATA` mediumtext COMMENT '发票数据',
-> PRIMARY KEY (`id`,`SH`),
-> KEY `index_sh` (`SH`)
-> ) ENGINE=InnoDB AUTO_INCREMENT=1173560 DEFAULT CHARSET=utf8 PARTITION BY LINEAR KEY (SH) PARTITIONS 8;
Query OK, 0 rows affected (0.11 sec)

备注:如果分区字段中有主键或者唯一索引的列,那么所有主键列和唯一索引列都必须包含进来,因此上一步必须有两个主键PRIMARY KEY (`id`,`SH`)存在。

插入数据:
mysql> insert into dsf_data select * from test.fp_data;
Query OK, 202632 rows affected, 1 warning (18.96 sec)
Records: 202632 Duplicates: 0 Warnings: 1


mysql> explain partitions select sh from dsf_data; --全表扫描共访问了8个分区(p0--p7)
+----+-------------+----------+-------------------------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------------------------+-------+---------------+----------+---------+------+------+-------------+
| 1 | SIMPLE | dsf_data | p0,p1,p2,p3,p4,p5,p6,p7 | index | NULL | index_sh | 98 | NULL | 8 | Using index |
+----+-------------+----------+-------------------------+-------+---------------+----------+---------+------+------+-------------+
1 row in set (0.00 sec)



mysql> explain partitions select sh from dsf_data where sh='130202568907641'; --值被随机分到了p0分区
+----+-------------+----------+------------+------+---------------+----------+---------+-------+------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------------+------+---------------+----------+---------+-------+------+--------------------------+
| 1 | SIMPLE | dsf_data | p0 | ref | index_sh | index_sh | 98 | const | 1 | Using where; Using index |
+----+-------------+----------+------------+------+---------------+----------+---------+-------+------+--------------------------+
1 row in set (0.00 sec)


mysql> explain partitions select sh from dsf_data where sh='440300683797687'; --值被随机分到了p4分区
+----+-------------+----------+------------+------+---------------+----------+---------+-------+------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------------+------+---------------+----------+---------+-------+------+--------------------------+
| 1 | SIMPLE | dsf_data | p4 | ref | index_sh | index_sh | 98 | const | 1 | Using where; Using index |
+----+-------------+----------+------------+------+---------------+----------+---------+-------+------+--------------------------+
1 row in set (0.00 sec)




mysql> explain partitions select sh from dsf_data where sh='91500107784224861G'; --sh的值被随机分到了p6分区
+----+-------------+----------+------------+------+---------------+----------+---------+-------+------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------------+------+---------------+----------+---------+-------+------+--------------------------+
| 1 | SIMPLE | dsf_data | p6 | ref | index_sh | index_sh | 98 | const | 452 | Using where; Using index |
+----+-------------+----------+------------+------+---------------+----------+---------+-------+------+--------------------------+
1 row in set (0.00 sec)

值被随机分到各个分区,说明分区表创建成功。

上述内容就是MySQL中如何创建Key分区表,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

函数 分区表 内容 技能 数据 时间 服务器 知识 索引 线性 哈希 服务 不同 相似 简明 成功 简明扼要 两个 关键 关键字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何填充有范围数据库 慈溪一站式软件开发管理 浦发银行网银显示服务器连接失败 网络技术管理并重 软件开发团队晨会开场白 点击分辨率显示服务器运行失败 医疗软件开发的公司治理方案 万方的数据库查重 全市网络安全工作培训会 郸城市网络安全教育 电脑联网DNS服务器不可用 软件开发测试运维的特点 山东省服务好的浪潮服务器销售 夜间低照度图像增强软件开发 黑魂1服务器关停 软件定义网络技术教材答案 天下数据韩国服务器怎么样 网络安全设备哈尔滨分公司 网络工程是培养网络安全人才吗 重庆网络安全产业城 吉尼斯世界纪录视频软件开发 上海网络技术市场价 服务器 安全狗卸载密码 山东华贵网络技术有限公司 北京软件开发测算 11所网络安全学校 网络技术有限公司税收多少 小班网络安全教案及反思 香港服务器建设论坛 威科先行数据库优缺点
0