MySQL 8.0 表分区

一、开发环境及软件
(1)win10家庭中文版
(2)Mysql8.0.23
(3)Navicat for MySQL
二、相关知识
参考mysql官网:https://dev.mysql.com/doc/refman/8.0/en/partitioning-types.html
本节讨论MySQL 8.0中可用的分区类型。其中包括以下类型:

(1)范围划分 (RANGE)
在给定范围内的分区将基于此类型的分区分配给属于此类型的行。
以一定范围为单位将区域分为不同区间。
(2)列表分区(LIST)
类似于按RANGE,但分区是基于与一组离散值之一匹配的列来选择的。
以单独的行为区间如(1,3,5,6),分区。
(3)哈希分区
对于这种类型的分区,根据用户定义的表达式返回的值来选择分区,该表达式对要插入到表中的行中的列值进行操作。该函数可以由任何在MySQL中有效并产生非负整数值的表达式组成。这种类型的延伸,LINEAR HASH,也可用。
(4)密钥分区(暂时还未确认与hash的区别)
这种类型的分区类似于HASH,只是只提供了一个或多个要评估的列,并且MySQL服务器提供了自己的哈希函数。这些列可以包含整数以外的值,因为MySQL提供的哈希函数保证结果是整数,而不管列的数据类型是什么。这种类型的延伸,线性键,也可用。

三、数据库分区
在这里插入图片描述

如图所示,右击数据库,打开命令列界面。
输入use airbird ;
进入到数据库;
如未建立相关表,则写入:
CREATE TABLE ‘表名’ (//此处为建立表中列标题。
id INT NOT NULL,
fname VARCHAR(30),
name VARCHAR(30),
hired DATE NOT NULL DEFAULT ‘1970-01-01’,
separated DATE NOT NULL DEFAULT ‘9999-12-31’,
job_code INT NOT NULL, store_id INT NOT NULL )
//ENGINE=InnoDB
PARTITION BY RANGE (‘列名’) //以下为分区范围,p0为单个区名。
( PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN MAXVALUE );

若已经创建表格则
alter table ‘表名’ PARTITION BY RANGE(列名)
(
PARTITION p0 VALUES LESS THAN (10),
PARTITION p1 VALUES LESS THAN (20),
PARTITION p2 VALUES LESS THAN (30),
PARTITION p3 VALUES LESS THAN (40),
PARTITION p4 VALUES LESS THAN (50),
PARTITION p19 VALUES LESS ThAN MAXVALUE);
检查是否分区成功:
select * from information_schema.partitions where table_schema=‘数据库名d’ and table_name like ‘表名%’;
即可获得如图分区显示:
在这里插入图片描述

四、性能测试
本次以RANGE方式安分钟分区
(1)首先先测试未分区情况下查询分钟为10到20的总数。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
(2)分区后:(本次以RANGE方式安分钟分区,10分钟为一区分为6个区)
在这里插入图片描述

由此可知,分区后会加快
(3)跨分区测试

在这里插入图片描述
在这里插入图片描述

测试结果:

由此可见,跨分区并无太大差拒。
(4)多分区
ALTER TABLE表名DROP PARTITION 分区名;删除分区(此处会连分区中数据一起删除不建议使用)
alter table trackinfonopart PARTITION BY RANGE(Minutes)
(PARTITION p01 VALUES LESS THAN (5),PARTITION p02 VALUES LESS THAN (10),
PARTITION p11 VALUES LESS THAN (15),
PARTITION p12 VALUES LESS THAN (20),PARTITION p21 VALUES LESS THAN (25),PARTITION p22 VALUES LESS THAN (30),PARTITION p31 VALUES LESS THAN (35),PARTITION p32 VALUES LESS THAN (40),PARTITION p41 VALUES LESS THAN (45),PARTITION p42 VALUES LESS THAN (50),PARTITION p51 VALUES LESS THAN (55),PARTITION p52 VALUES LESS THAN (60));
创建多分区。(每5分钟为一分区)
测试用例:
在这里插入图片描述

测试结果:

在这里插入图片描述

五、有关问题及解决
(1)QMYSQL driver not loaded
此处是qt打开数据库时的报错,原因为qt未安装sql相关的依赖库。解决办法网上一搜一大把。此次在其他地方搜到了libmysql.dil等相关库,直接拉入exe目录下即可。
(2)Multiple primary key defined
在创建复合键值时报错。此处为重复设置主键,及主键已经设置过了。
(3)A PRIMARY KEY must include all columns in the table’s partitioning function
此错误原因是range分区的时候分区内容中没有包含关键字,解决方法:
删除原有key键 :alter table results drop PRIMARY KEY;
添加新Key键:alter table results add PRIMARY KEY(id, ttime);

(4)分区后数据库能否拷贝。

(5)The total number of locks exceeds the lock table size
此问题在分区时遇到,原因为分区时所用数据量过大,缓存区过小。解决方法,
扩大缓存区,C:\ProgramData\MySQL\MySQL Server 8.0为默认位置,在my.ini中找到tmp_table_size,和innodb_buffer_pool_size,改为tmp_table_size=3G,和innodb_buffer_pool_size=3G.如果不够继续扩大缓存。
(6)VALUES LESS THAN value must be strictly increasing for each partition
分区表是按范围进行分区,其中,分区顺序是严格地进行递增。就是说,如果想在中间新增分区是不可行的,只能按照顺序进行递增。所以,测试的时候,是删除了其中一个分区,然后进行测试。所以这是不符合MySQL的定义。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值