mysql查询分区表数据(mysql分区表建表语句)
mysql查询分区表数据(mysql分区表建表语句),本文通过数据整理汇集了mysql查询分区表数据(mysql分区表建表语句)相关信息,下面一起看看。
在后台项目中,有些表空间太大,行数太多,所以决定把一些表分成数据库和表。研究选择方案时,发现一些常用的数据库划分和表划分方案对业务代码的修改比较多,于是决定采用MySQL划分方案。
其实在我个人看来,分区表就是MySQL帮我们实现底层子数据库表,不需要涉及业务代码的修改,也不需要关注分布式事务。就数据库访问而言,逻辑上仍然只有一个表,但实际上有很多物理分区对象,具体的分区会根据具体的分区规则进行查询。
介绍一下这个练习的表格。表空间172G,有1.2亿条记录。
版本RDS MySQL 5.6
工具阿里云DTS
第一,为什么要分区?优点对于已经过期或者不需要保存的数据,可以通过删除与这些数据相关的分区来快速删除这些数据,比删除效率高很多。当where子句中包含分区条件时,可以只扫描必要的一个或多个分区以提高查询效率,例如下面的语句
SELECT FROM t PARTITION(p0,p1)其中c 5只选择分区p0和p1中符合WHERE条件的记录。
当涉及聚合函数SUM()和COUNT()的查询在每个分区上并行处理,一个表的原始数据存储在多个物理磁盘上,从而实现更高的IOPS。缺点不能用外键,不支持全文索引(现在应该没有公司还在用外键)。分区键设计不是很灵活,如果不拿分区键,很容易开发出全表锁来写一个SQL。我不知道mysql是怎么工作的。二、范围分区目前MySQL支持四种类型范围分区、列表分区、哈希分区和键分区。
在本文中,时间是按值域划分的,所以我简单介绍一下值域划分。更多分区类型见官方文档MySQL 5.6分区类型。
基于给定连续间隔的列值,分区根据该间隔进行分配。最常见的是基于时间字段。事实上,基于分区的列最好是整数,如果是基于日期的,可以通过函数转换成整数。MySQL 5.6支持的分区函数
在此示例中,使用了TO_DAYS函数。
CREATE TABLE members(id VARCHAR(25)NOT NULL,firstname VARCHAR(25) NOT NULL,lastname VARCHAR(25) NOT NULL,username VARCHAR(16) NOT NULL,email VARCHAR(35),joindate DATETIME NOT NULL DEFAULT ' 0000-00-00 00 00:00:00 ',使用BTREE的主键(id,joindate),使用BTREE的键idx _ join date(join date)ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW _ FORMAT=compact PARTITION BY RANGE(TO _ TOPS:如示例所示,如果您有一个主键或唯一索引,您还必须添加您的分区键,其中joindate是分区键,否则创建将失败!
PS:像上面加小于MAXVALUE,后面就不能加新分区了!
示例
以下查询将落在定义的p2分区中的索引上。所以用分区键查询的时候,会去对应的分区查询数据。如果跨多个分区查询聚合函数SUM()和COUNT(),它将在每个分区上并行处理。如果没有分区键查询,将查询整个表。
解释分区select from成员WHERE joindate介于“1970-02-03”和“1970-02-04”之间;
我在迁移数据进行查询的时候发现了一个特别有意思的现象。如果同一个SQL的分区键的时间间隔不一样,就会根据行数在不同的范围内进行索引。至于底层是怎么实现的,我就不研究了。
三、分区管理简单介绍下范围分区,然后是分区的常用操作。
分区管理包括添加、删除和查询分区。详见官方文档MySQL分区管理。
1.为范围和列表分区添加分区
Alter table _ name添加分区(分区P0值.(EXP)) # example alter table成员添加分区(to _ days(' 2021-03-01 ');2.删除分区会删除一个分区,该分区中的所有数据将被删除。如果分区被删除,并且分区不能覆盖所有值,则在插入数据时会报告错误。
alter table table_name删除分区P0;3.查询有多少分区select from information _ schema . partitions where table _ name=' members ';
四。数据迁移。之前说了这么多概念,这次来说说大表数据迁移到分区表的过程。
你为什么选择DTS?因为它可以在不停机的情况下迁移数据,所以它支持完全迁移和增量迁移,对原始表的影响很小。
迁移过程如下
,在RDS的同一个实例中创建一个具有相同结构的新分区表,并使用DTS创建迁移任务。迁移时,不要选择结构钱钱乙,只需选择完全增量迁移,然后需要编辑目标数据库表名,即进行映射,停止从A-B迁移写数据的任务,等待几分钟暂停并结束迁移任务,修改表名完成数据迁移和切换(我需要一些时间在测试环境下修改分区表名,
官方文档MySQL 5.6分区
以上纯属个人观点。有不对的地方请指正。
更多mysql查询分区表数据(mysql分区表建表语句)相关信息请关注本站,本文仅仅做为展示!