高性能的MySQL(7)分区技术

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

在我之前的2篇博客中已经简单介绍过MySQL5.1之后的分区技术的基本理论和分区技术的表存储文件及特点,博客地址如下:

http://janephp.blog.51cto.com/4439680/1305220

http://janephp.blog.51cto.com/4439680/1305937

今天要介绍一下分区技术一些使用场景和机制。

MySQL实现分区表的方式--对底层表封装--意味着索引也按照分区的子表定义的,而没有全局索引。

一、在下面的场景中,作用非常大:

1、表非常大无法全部放到内存中,或者表的最后部分有热点数据,其他均是历史数据。

2、分区的数据更容易维护,可以对整个分区操作,还可以对独立分区进行优化、检查、修复操作。

3、分区表的数据可以分布在不同的物理设备上

4、可以使用分区表来避免某些特殊的瓶颈,例如InnoDB的单个索引互斥访问。

分区表本身也有一些限制:

1、一个表最多只能有1024个分区

2、分区表达式必须是整数,或者返回整数的表达式。

3、分区表无法使用外键

二、分区表的原理

存储引擎管理分区的各个底层表和管理普通表一样,所有底层表都必须使用相同的引擎,从存储引擎来看,底层表和普通表么有任何不同。

分区表按照下面的操作逻辑进行:

SELECT:

当查询一个分区表的时候,分区层先打开并锁住所有底层表,优化器先判断是否可以过滤掉部分分区,然后进行操作。

INSERT:

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

DELETE:

当删除一条记录时,分区层先打开并锁住所有的底层表,然后确定哪个分区接收这个记录,操作。

UPDATE:

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


但并不是每个操作都会锁住所有的表,如果引擎有自己的行级锁,例如InnoDB,则会在分区层释放对应的表锁。


三、如何使用

一般有2个策略:

1、全量扫描数据,不要任何索引。

2、索引数据,并分离热点。

但是必须注意到一下几点:

1、NULL会使分区过滤无效。

第一个分区是一个特殊分区,假设按照PARTITION BY RANGE YEAR(order_date)分区,那么所有order_date为null的或者非法值的,都会被存储到第一个分区。所以这样的查询where order_date between '2012-01-01' and '2012-12-31'会检测2个分区,除了2012这个分区还会检测第一个分区。

为了避免这种情况,可以创建一个无用的第一分区,例如 PARTITION p_null VALUES LESS THAN(0),这样即使检索代价很小的。

2、分区列和索引列不匹配,会导致无法进行分区过滤。

如果a上有索引,而列b进行分区,因为每个分区都有自己独立的索引,所以扫描列b上的索引就需要扫描每一个分区对应的索引。

特别在一个关联查询中,分区表在关联顺序的第二个表,并且索引分区列不匹配,则关联时针对第一个表符合条件的每一个表,都需要访问并搜索第二个表的所有分区。

3、选择分区、打开并锁表,维护分区可能代价很高。

4、所有分区都必须相同的存储引擎。

5、某些引擎不支持分区。

6、分区函数中可以使用的函数和表达式也有一些限制啊。


四、优化查询

使用EXPLAIN PARTITION可以查看优化器是否执行了分区过滤。例如:

193748923.png

如果我们加一个过滤条件

194020945.png

但是条件中不能对分区列进行任何表达式和函数操作,那样就无法使用分区过滤例如:

194309212.png

我们可以把上面的查询等价的改写一下就可以了。

194456741.png


所以一个重要的原则是创建分区时可以使用表达式,但在查询时只能根据列来过滤分区。






















本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1317390,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
25天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
95 0
|
20天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
5天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
6天前
|
存储 运维 关系型数据库
高性能 MySQL 第四版(GPT 重译)(四)(2)
高性能 MySQL 第四版(GPT 重译)(四)
41 4
|
6天前
|
存储 缓存 关系型数据库
高性能 MySQL 第四版(GPT 重译)(三)(1)
高性能 MySQL 第四版(GPT 重译)(三)
51 4
|
25天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
73 0
|
25天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)(一)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)
30 0
|
25天前
|
SQL 关系型数据库 MySQL
【MySQL技术之旅】(7)总结和盘点优化方案系列之常用SQL的优化
【MySQL技术之旅】(7)总结和盘点优化方案系列之常用SQL的优化
39 1
|
2月前
|
存储 关系型数据库 MySQL
MySQL分区的优缺点
数据库中分区是将表或索引的数据划分成更小、更可管理的部分的一种技术。这些部分被称为分区,每个分区可以独立地进行维护和管理。
46 0
|
2月前
|
存储 关系型数据库 MySQL
《高性能Mysql》学习笔记(二)
《高性能Mysql》学习笔记(二)
136 0

推荐镜像

更多