广州证券

MySQL分区表的基本入门教程

 更新时间:2020年05月31日 14:58:07   转载 作者:十毛tenmao  
这篇文章主要给大家介绍了配资公司 MySQL分区表的基本入门教程,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

在最近的项目中,我们需要保存大量的数据,而且这些数据是有有效期的,为了提供查询效率以及快速删除过期数据,我们选择了MySQL的分区机制。把数据按照时间进行分区。

分区类型

  • Range分区:最为常用,基于属于一个给定连续区间的列值,把多行分配给分区。最常见的是基于时间字段. 基于分区的列最好是整型,如果日期型的可以使用函数转换为整型。
  • List分区:LIST分区和RANGE分区类似,区别在于LIST是枚举值列表的集合,RANGE是连续的区间值的集合。
  • Hash分区:基于给定的分区个数,将数据分配到不同的分区,HASH分区只能针对整数进行HASH,对于非整形的字段只能通过表达式将其转换成整数。
  • Key分区:KEY分区其实跟HASH分区差不多,不同点如下:
    • KEY分区允许多列,而HASH分区只允许一列。
    • 如果在有主键或者唯一键的情况下,key中分区列可不指定,默认为主键或者唯一键,如果没有,则必须显性指定列。
    • KEY分区对象必须为列,而不能是基于列的表达式。
    • KEY分区和HASH分区的算法不一样,PARTITION BY HASH (expr),MOD取值的对象是expr返回的值,而PARTITION BY KEY (column_list),基于的是列的MD5值。

分区命令

创建分区

CREATE TABLE `access_log` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `access_time` datetime NOT NULL,
 PRIMARY KEY (`id`,`access_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (to_days(access_time))
(PARTITION p1 VALUES LESS THAN (to_days(20190101)) ENGINE = InnoDB,
 PARTITION p2 VALUES LESS THAN (to_days(20190102)) ENGINE = InnoDB,
 PARTITION p3 VALUES LESS THAN (to_days(20190103)) ENGINE = InnoDB) */;

创建后可以看到,每个分区都会对应1个ibd文件


分区表

新增分区

alter table access_log add partition(
 partition p4 values less than (to_days('20190105'))
);

删除分区

alter table access_log drop partition p1;

拆分分区

alter table access_log reorganize partition p4 into(
 -> partition s0 values less than(to_days('20190104')),
 -> partition s1 values less than(to_days('20190105'))
 -> );

合并分区

alter table access_log reorganize partition s0,s1 into ( 
 partition p4 values less than (to_days('20190105')) 
);

注意事项

  • MySQL分区中如果存在主键或唯一键,则分区列必须包含在其中(否则判断主键或唯一时,需要扫描所有分区)
  • 分区字段不能为NULL,要不然怎么确定分区范围呢,所以尽量NOT NULL
  • 最大分区数目不能超过1024
  • 不支持外键
  • 只能对数据表的整型列进行分区,或者数据列可以通过分区函数转化成整型列
  • 分区表不影响自增列

常见问题

  • A PRIMARY KEY must include all columns in the table's partitioning function:这样的话判断主键是否唯一就可以在单个分区内部完成,否则就需要跨所有的分区
  • MAXVALUE can only be used in last partition definition:RANGE表分区后不能带MAXVALUE分区,否则无法增加分区。或者就只能重新分区了
alter table access_log partition by range(to_days(access_time))(
partition p1 values less than (to_days('20191202')), 
partition p2 values less than (to_days('20191203')), 
 partition po values less than (maxvalue)
)
  • Table has no partition for value 737425:因为分区的范围没有包含所有可能的记录的值

参考

总结

到此这篇配资公司 MySQL分区表基本入门教程的文章就介绍到这了,更多相关MySQL分区表内容请搜索脚本之家以前的文章或继续浏览下面的广州证券相关的文章希望大家以后多多支持脚本之家!

广州证券相关的文章

  • MariaDB(MySQL)创建、删除、选择及数据类型使用详解

    MariaDB(MySQL)创建、删除、选择及数据类型使用详解

    这篇文章主要介绍了MariaDB(MySQL)创建、删除、选择及数据类型使用详解的相关资料,需要的朋友可以参考下
    2016-09-09
  • mysql索引最左原则实例代码

    mysql索引最左原则实例代码

    这篇文章主要给大家介绍了配资公司 mysql索引最左原则的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • PHP函数使用说明(补充)

    PHP函数使用说明(补充)

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助。
    2010-07-07
  • 解决Linux下Tomcat向MySQL插入数据中文乱码问题

    解决Linux下Tomcat向MySQL插入数据中文乱码问题

    本文给大家介绍的是如何解决win平台下开发的项目移植到Linux平台后,向MySQL插入数据时中文出现乱码的问题,非常的简单实用,有需要的小伙伴可以参考下
    2018-04-04
  • mysql 8.0.13 解压版安装配置方法图文教程

    mysql 8.0.13 解压版安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.13 解压版安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 深入mysql并发插入优化详解

    深入mysql并发插入优化详解

    本篇文章是对mysql并发插入优化进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 新手学习MySQL索引

    新手学习MySQL索引

    如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有索引的MySQL就是一个人力三轮车。通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢,下面小编来带大家了解下索引
    2019-05-05
  • mysql 5.7.18 zip版安装使用教程

    mysql 5.7.18 zip版安装使用教程

    这篇文章主要为大家详细介绍了mysql 5.7.18 zip版安装使用教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • MySQL开启慢查询日志log-slow-queries的方法

    MySQL开启慢查询日志log-slow-queries的方法

    MySQL中提供了一个慢查询的日志记录功能,可以把查询SQL语句时间大于多少秒的语句写入慢查询日志,日常维护中可以通过慢查询日志的记录信息快速准确地判断问题所在
    2016-05-05
  • mysql 找回误删表的数据方法(必看)

    mysql 找回误删表的数据方法(必看)

    下面小编就为大家带来一篇mysql 找回误删表的数据方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论

深高CWB1(580014)

上汽CWB1(580016)

赣粤CWB1(580017)

石化CWB1(580019)

上港CWB1(580020)

青啤CWB1(580021)

国电CWB1(580022)

康美CWB1(580023)

宝钢CWB1(580024)

葛洲CWB1(580025)