MySql采用range分区可提升查询效率
Posted dwBurning
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql采用range分区可提升查询效率相关的知识,希望对你有一定的参考价值。
简介:
RANGE分区基于一个给定的连续区间范围,早期版本RANGE主要是基于整数的分区。在5.7版本中DATE、DATETIME列也可以使用RANGE分区,同时在5.5以上的版本提供了基于非整形的RANGE COLUMN分区。RANGE分区必须的连续的且不能重叠。使用
“VALUES LESS THAN ()” 来定义分区区间,非整形的范围值需要使用单引号,并且可以使用MAXVALUE作为分区的最高值。
本文将给大家介绍mysql 5.6.24 range分区增加删除处理的相关内容,分享给大家供大家参考学习,下面来看看详细的介绍:
box_enter_record_archive表中大概有40万数据,在没有任何改动的情况下查询:耗时0.545s
把时间加为主键,注意:mysql中创建分区的字段必须在主键中,然后查询耗时:0.547s
采用range分区
ALTER TABLE `box_enter_record_archive` partition by range(to_days(entertime)) ( partition P0 values less than (to_days(\'2018-01-01\')), partition P1 values less than (to_days(\'2018-02-01\')), partition P2 values less than (to_days(\'2018-03-01\')), partition P3 values less than (to_days(\'2018-04-01\')), partition P4 values less than (to_days(\'2018-05-01\')), partition P5 values less than (to_days(\'2018-06-01\')), partition P6 values less than (to_days(\'2018-07-01\')), partition P7 values less than (to_days(\'2018-08-01\')), partition P8 values less than (to_days(\'2018-09-01\')), partition P9 values less than (to_days(\'2018-10-01\')), partition P10 values less than (to_days(\'2018-11-01\')), partition P11 values less than (to_days(\'2018-12-01\')) )
查看分区情况,每个分区有多少记录
SELECT partition_name,table_rows,a.* FROM INFORMATION_SCHEMA.partitions a WHERE TABLE_SCHEMA = schema() AND TABLE_NAME=\'box_enter_record_archive\';
创建分区后查询耗时:0.169s
再为entertime添加索引后,查询耗时:0.004s
相关命令:
ALTER TABLE `box_enter_record_archive` DROP partition p0; -- 删除box_enter_record_archive表中的某一个分区。 ALTER TABLE `box_enter_record_archive` REMOVE partitioning; -- 删除box_enter_record_archive表的分区并将其恢复为其原始的非分区状态。 ALTER TABLE `box_enter_record_archive` add partition(partition P12 values less than (to_days(\'2019-01-01\'))); -- 新增range分区
每天,进步一点点
以上是关于MySql采用range分区可提升查询效率的主要内容,如果未能解决你的问题,请参考以下文章