浅谈MySQL原理与优化(二)—— 处理引擎

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 我们来详细的分析一下处理引擎的作用。处理引擎相当于MySQL的大脑。他有三个非常重要的作用。管理理连接与线程、管理query cache、 解析SQL语句与执⾏计划⽣生成

引言

在上一篇中,我们探讨了MySQL的体系结构的组成部分。主要由客户端、处理引擎、存储引擎组成
image

现在,我们来详细的分析一下处理引擎的作用。处理引擎相当于MySQL的大脑。他有三个非常重要的作用。

管理连接与线程

mysql是采用的多线程模型,使用线程池来管理数据库的连接。线程对象被放在一个线程池中重复利用,这样可以减少重复创建对象的开销。我们可以通过thread_cache_size来设定线程池的大小,让MySQL更好的利用已有的线程连接。

image

管理query cache:

query cache是mysql一个独有的设计。MySQL会利用之前的查询结果,直接缓存结果集。简单来说,原理类似于将SQL语句和结果集作为一个个key-value键值对存储起来。如果下次有同样的查询语句,且数据库没有发生变化。MySQL并不会访问实际的表,而是会直接返回之前的结果集。注意这里的“同样的语句”即要完全一样,一个字都不能差。合理的利用query cache会得到很好的性能,当然,测试性能时query cache会带来些困扰,可以用 sql_no_cache hint 屏蔽

解析SQL语句与执⾏计划⽣生成

处理引擎会将SQL语句解析成语法树的结构,这样就可以理解语句中的字段,表,条件等信息。
image

接着,需要确定如何执行SQL语句并返回结果数据。众所周知,SQL是一个声明式的语言,用户在语句中只说明了想要的结果,并没有告诉引擎用什么样的过程去获得数据。这对于用户来说编程起来更容易,但是对于DBMS来说,增加了复杂性,执行计划需要引擎自己来确定。完成这部分工作的代码被称作优化器。

对于一个固定的查询,往往有很多种执行方式,优化器的任务就是在其中选择最优解即代价最小的一种。

这就好像是围棋AI 阿尔法狗,要从围棋可能的无数种落子中选择胜率最高的一样。
image

优化器会使用一个代价计算函数,来估算每种执行方式的时间代价,最终从若干中执行方式中,选择他认为代价最小的一种。

注意,这个代价是估算的,并不一定非常的准确,依赖的标准是数据表的一些统计信息,如果统计信息不够准确,或者优化器的估算方法并没有很好,也会造成MySQL的执行计划不是最优化的。

我们在实践中也确实会遇到这样的情况,通常会使用两种方法来解决

  1. 使用hint来提示mysql用更好的执行计划
  2. 简化语句,让MySQL更容易的估算代价。

以上是MySQL执行引擎的介绍和解析,希望对大家的日常工作,能有更好的帮助。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
SQL 存储 关系型数据库
不允许你不知道的 MySQL 优化实战(三)
不允许你不知道的 MySQL 优化实战(三)
50 1
|
7月前
|
SQL 关系型数据库 MySQL
不允许你不知道的 MySQL 优化实战(二)
不允许你不知道的 MySQL 优化实战(二)
49 2
|
7月前
|
SQL 关系型数据库 MySQL
不允许你不知道的 MySQL 优化实战(一)
不允许你不知道的 MySQL 优化实战(一)
56 2
|
7月前
|
存储 关系型数据库 MySQL
MySQL(二)索引原理以及优化
MySQL(二)索引原理以及优化
77 0
|
SQL 索引
MySQL-优化分析
MySQL-优化分析
65 0
|
SQL 存储 缓存
高性能 MySQL(十):执行一个查询的过程
当希望 MySQL 能够以更高的性能运行查询时,最好的办法就是搞清楚 MySQL 是如何优化和执行查询的。一旦理解这一点,很多查询优化工作实际上就是遵循一些原则,让优化器按照预想的方式运行。
98 0
高性能 MySQL(十):执行一个查询的过程
|
SQL 存储 缓存
【MySQL高级】应用优化及Mysql中查询缓存优化以及Mysql内存管理及优化
【MySQL高级】应用优化及Mysql中查询缓存优化以及Mysql内存管理及优化
198 0
【MySQL高级】应用优化及Mysql中查询缓存优化以及Mysql内存管理及优化
|
存储 缓存 算法
如何在MySQL中优化查询性能?底层原理是什么?
如何在MySQL中优化查询性能?底层原理是什么?
113 0
|
存储 缓存 安全
MySQL性能优化(一):MySQL架构与核心问题
在 MySQL 性能优化之前,你有必要重新再认识下 MySQL,便于后续更容易理解 MySQL 性能优化中涉及到的知识点。本文将从 MySQL 架构、核心问题来针对性展开讨论,这也将是 MySQL性能优化 系列文章的开篇之作。
553 1
|
存储 关系型数据库 MySQL
MySQL - 索引原理及其优化(一)
MySQL - 索引原理及其优化(一)
136 0
MySQL - 索引原理及其优化(一)