MySQL中分区表是什么含义
发布时间:2022-02-19 14:35:14 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要介绍MySQL中分区表是什么意思 ,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 对于用户而言,分区表是一个独立的逻辑表,但是在底层由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装,对分区
这篇文章主要介绍MySQL中分区表是什么意思 ,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 对于用户而言,分区表是一个独立的逻辑表,但是在底层由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装,对分区表的请求都会通过句柄对象转化成对存储引擎的接口调用 表非常大以至于无法全部都放在内存中,或者只在表的最后部分有热点数据其他均是历史数据 分区表的数据更容易维护 分区表的数据可以分布在不同的物理设备上 可以使用分区表来避免某些特殊的瓶颈 如果需要,可以备份和回复独立的分区 分区表本身也有一些限制,下面几点尤为重要: 一张表最多只能有1024个分区 在MySQL5.1 中,分区表达式必须是整数,或者是返回整数的表达式。在MySQL5.5 中,某些场景可以直接使用列来进行分区 分区表中无法使用外键约束 如果分区字段中有主键或者唯一索引的列,那么所有主键列和唯一索引列都必须包含进来 分区表的原理 存储引擎管理分区的各个底层表和管理普通表并没有什么区别(所有的底层表都必须使用相同的存储引擎) ,分区表的索引只是在各个底层表上各自加上一个完全相同的索引。从存储引擎的角度看,底层表和一个普通表并没有什么区别,存储引擎也无需知道这是一个普通表还是一个分区表的一部分。 分区表上的操作按照下面的操作逻辑进行: SELECT 查询 当查询一个分区表的时候,分区层先打开并锁住所有的底层表,优化器先判断是否可以过滤部分分区,然后再调用对应的存储引擎接口访问各个分区的数据 INSERT 操作 当写入一条记录的的时候,分区层先打开并锁住所有的底层表,然后确定哪个分区接收这条记录,再将记录写入对应底层表 DELETE 操作 当删除一条记录的的时候,分区层先打开并锁住所有的底层表,然后确定数据对应的分区,最后对相应底层表进行删除操作 UPDATE 操作 当更新一条记录时,分区层先打开并锁住所有的底层表,MySQL先确定需要更新的记录再哪个分区,然后取出数据并更新,再判断更新后的数据应该放在哪个分区,最后对底层表进行写入操作,并对原数据所在的底层表进行删除操作。 这些操作都是支持过滤的。 虽然每个操作都会“先打开并锁住所有的底层表”, 但这并不是说分区表在处理过程中是锁住全表的。如果存储引擎能够自己实现行级锁,则会在分区层释放对应表锁。这个加锁和解锁过程与普通InnoDB上的查询类似。 分区表的类型 MySQL支持多种分区表,我们看到最多的就是根据范围进行分区,每个分区存储落在某个范围内的记录。分区表达式可以是列,也可以是包含列的表达式。 例如,如下表就将每一年的销售额都存放在不同的分区中: CREATE TABLE sales( order_date DATETIME NOT NULL, .... )ENGINE=InnoDB PARTITION BY RANGE(YEAR(order_date))( PARTITION p_2010 VALUES LESS THAN (2010), PARTITION p_2011 VALUES LESS THAN (2011), PARTITION p_2012 VALUES LESS THAN (2012), PARTITION p_catchall VALUES LESS THAN MAXVALUE; ) PARTITION 分区子句中可以使用各种函数。但是有一个要求, 表达式返回的值必须是一个确定的整数,且不能是一个常数。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |