什么是数据库分区?
Mysql数据库中的数据是以文件的形式保存在磁盘上的,默认放在mysql/data路径,不同的引擎生成的文件后缀不同,像MyISAM生成.MYD和.MYI后缀文件,MYI存放索引(非聚簇索引)。Innodb生成.idb后缀文件(聚簇索引)。
当mysql表中数据越来越多,文件会变的越来越大,这个时候查询数据的速度会变慢。这个时候就可以用到分区这个功能,将一张表生成的数据文件拆分为多份,进行横向水平分区,提升查询效率。并且分区在清理历史数据的场景上非常高效
“随着MySQL越来越流行,Mysql里面的保存的数据也越来越大。在日常的工作中,我们经常遇到一张表里面保存了上亿甚至过十亿的记录。这些表里面保存了大量的历史记录。 对于这些历史数据的清理是一个非常头疼事情,由于所有的数据都一个普通的表里。所以只能是启用一个或多个带where条件的delete语句去删除(一般where条件是时间)。 这对数据库的造成了很大压力。即使我们把这些删除了,但底层的数据文件并没有变小。面对这类问题,最有效的方法就是在使用分区表。最常见的分区方法就是按照时间进行分区。 分区一个最大的优点就是可以非常高效的进行历史数据的清理。”
目前MySQL支持范围分区(RANGE),列表分区(LIST),哈希分区(HASH)以及KEY分区四种。下面我们逐一介绍每种分区:
RANGE分区:
基于属于一个给定连续区间的列值,把多行分配给分区。最常见的是基于时间字段. 基于分区的列最好是整型,如果日期型的可以使用函数转换为整型。本例中使用to_days函数
如上图,以时间字段分区,把一个航班动态相关的表分成5个区先。
分完了以后可以看到生成了5个.ibd文件(Innodb)
INSERT INTO `nick`.`partition_table_name`(`id`, `flightno`, `flight