MySQL数据分区存储

MySQL是一种传统的关系型数据库,其体积小、速度快、成本低,但是对于大数据量(百万级以上)的操作显得有些力不从心。

最近小编使用的MySQL数据库就面临了大数据量操作的问题,当数据量达到百万级之后,查询速度明显下降,此时就需要优化提升查询速度了。

data表分区存储

原理解释

分区是把存放数据的文件分成许多小块,存储在磁盘中不同的区域,通过提升磁盘I/O能力来提升查询速度。分区不会更改数据库表的结构,发生变化的是存储方式。

实现方式

采用range分区,选择合适的数据表字段实现分区存储。用小编的数据表作为例子,选择年份为基准,不同的区域存储的是不同年份的数据,可以采用合并语句进行分区的合并,分区操作由MySQL暗箱完成,从用户的角度看,数据库表不会改变,程序的代码也不需要更改。

优缺点

优点:range分区实现方便,没有破坏原本数据库表的结构,用户也不需要更改dao层代码和查询方式。而且可以提前预设分区,比如今年是2018年,用户可以将数据分区预设到2020年,方式灵活,便于扩充。

缺点:数据存储依赖于分区的存储磁盘,一旦磁盘损坏,则会造成数据的丢失。

 

相关操作

选择需要建立分区的数据表字段,对其建立BTREE索引

分区之前将分区字段改为datetime/date类型,才能进行分区操作(注:char类型不支持分区操作)。

建立分区

采用range分区以保证分区均匀

ALTER TABLE `gt_stk_index`
partition by range(YEAR(create_time))
(
 PARTITION p2007 VALUES LESS THAN (2008),
 PARTITION p2008 VALUES LESS THAN (2009),
 PARTITION p2009 VALUES LESS THAN (2010),
 PARTITION p2010 VALUES LESS THAN (2011),
 PARTITION p2011 VALUES LESS THAN (2012),
 PARTITION p2012 VALUES LESS THAN (2013),
 PARTITION p2013 VALUES LESS THAN (2014),
 PARTITION p2014 VALUES LESS THAN (2015),
 PARTITION p2015 VALUES LESS THAN (2016),
 PARTITION p2016 VALUES LESS THAN (2017),
 PARTITION p2017 VALUES LESS THAN (2018),
 PARTITION p2018 VALUES LESS THAN (2019),
 PARTITION p2019 VALUES LESS THAN (2020),
 PARTITION p2020 VALUES LESS THAN (2021),
 PARTITION p2021 VALUES LESS THAN (2022),
 PARTITION p2022 VALUES LESS THAN (2023),
 PARTITION p2023 VALUES LESS THAN (2024),
 PARTITION p2024 VALUES LESS THAN (2025)
)

查看分区

SELECT
	*
FROM
	INFORMATION_SCHEMA. PARTITIONS
WHERE
	TABLE_NAME = 'gt_stk_index';

查询结果

分区优化后,查询速度提升主要体现在非跨区查询的时候,当查询条件均属于一个区域时,数据库可以快速定位到所查分区,而不会扫描全表。

每次插入数据的时候,数据库会判定对应的create_time属于哪个分区,从而存储到对应的分区中,不会影响其它分区。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值