MySQL数据分区存储
Posted 王萌萌萌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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属于哪个分区,从而存储到对应的分区中,不会影响其它分区。
以上是关于MySQL数据分区存储的主要内容,如果未能解决你的问题,请参考以下文章