专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 MySQL分区表原理详解

MySQL分区表原理详解

更新时间:2021-01-12 17:45:23 来源:赢咖4 浏览1187次

分区表是将大表的数据分成称为分区的许多小的子集,分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表。由于在MySQL数据库中,我们对MySQL分区表的理解十分晦涩,为了更好地理解MySQL分区表,本文我们来详细讲一讲MySQL分区表原理

 

如前所述,分区表由多个相关的底层表实现,这些底层表也是由句柄对象(Handler object)标识,所以可以直接访问各个分区。分区有利于管理非常大的表,它采用分而治之的逻辑,分区引入了分区键的概念,分区键用于根据某个区间值(或者范围值)、特定值列表或者hash函数值执行数据的聚集,让数据根据规则分布在不同的分区中,让一个大对象变成一些小对象。

 

存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎),分区表的索引只是在各个底层表上各自加上一个完全相同的索引

从存储引擎的角度来看,底层表和一个普通表没有任何不同,存储引擎也无须直到这是一个普通表还是一个分区表的一部分。

 

我们先来看看MySQL分区表上的操作:

SELECT查询:当查询一个分区表的时候,分区层先打开并锁住所有的底层表,优化器先判断是否可以过滤部分分区,然后再调用对应的存储引擎接口访问各个分区的数据。

INSERT操作:当写入一条记录时,分区层先打开并锁住所有的底层表,然后确定哪个分区接收这条记录,再将记录写入对应底层表

DELETE操作:当删除一条记录,分区层先打开并锁住所有的底层表,然后确定数据对应的分区,最后对相应底层表进行删除操作。

UPDATE操作:当更新一条记录时,分区层先打开并锁住所有的底层表,MySQL先确定需要更新的记录在哪个分区,然后取出数据并更新,在判断更新后的数据应该放在哪个分区,最后对底层表进行写入操作,并对原数据所在的底层表进行删除操作。

 

有些操作是支持过滤的。当删除一条记录时,MySQL需要先找到这条记录,如果WHERE条件恰好和分区表达式匹配,就可以将所有不包含这条记录的分区都过滤掉。这对UPDATE语句同样有效。如果是INSERT操作,则本身就是只命中一个分区,其他分区都会被过滤掉。MySQL先确定这条操作属于哪个分区,再将记录写入对应的底层分区表,无须对任何其他分区进行操作。虽然每个操作都会”先打开并锁住所有的底层表“,但这并不是说分区表在处理的过程中是锁住全表的。如果存储引擎能够自己实现行级锁,例如InnoDB,则会在分区层释放对应表锁。这个加锁和解锁过程与普通InnoDB上的查询类似。

 

MySQL分区表与单个磁盘或文件系统分区相比,可以存储更多的数据。了解MySQL分区表原理便于我们理解MySQL分区表的使用,对于我们掌握MySQL分区表是十分必要的。想要学习更多的MySQL数据库中的知识,快来本站的MySQL教程学习吧!

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>