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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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执行引擎的介绍和解析,希望对大家的日常工作,能有更好的帮助。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9月前
|
SQL 存储 关系型数据库
不允许你不知道的 MySQL 优化实战(三)
不允许你不知道的 MySQL 优化实战(三)
54 1
|
JSON 安全 关系型数据库
MySQL 7.0 功能特性
MySQL 是一款广泛应用于各种 Web 应用程序和企业级系统的关系型数据库管理系统。MySQL 7.0 是 MySQL 数据库的一个重要版本,引入了许多令人兴奋的功能特性,提升了性能、安全性和可用性。本篇博客将介绍 MySQL 7.0 的一些主要功能特性。
279 0
|
9月前
|
SQL 关系型数据库 MySQL
不允许你不知道的 MySQL 优化实战(二)
不允许你不知道的 MySQL 优化实战(二)
54 2
|
6月前
|
存储 关系型数据库 MySQL
MySQL 上亿大表,如何深度优化?
【8月更文挑战第11天】随着大数据时代的到来,MySQL 作为广泛使用的关系型数据库管理系统,经常需要处理上亿级别的数据。当数据量如此庞大时,如何确保数据库的查询效率、稳定性和可扩展性,成为了一个亟待解决的问题。本文将围绕 MySQL 上亿大表的深度优化,分享一系列实用的技术干货,帮助你在工作和学习中应对挑战。
652 1
|
9月前
|
SQL 关系型数据库 MySQL
不允许你不知道的 MySQL 优化实战(一)
不允许你不知道的 MySQL 优化实战(一)
67 2
|
存储 搜索推荐 关系型数据库
MySQL 6.0 功能特性
MySQL 作为最受欢迎的关系型数据库管理系统之一,不断推出新版本以满足用户的需求和期望。在这篇博客中,我们将介绍即将推出的 MySQL 6.0 版本带来的一些令人兴奋的功能特性。
178 2
|
SQL 关系型数据库 MySQL
超全的MySQL核心原理,从底层剖析MySQL
相信一讲到MySQL,很多的开发人员,印象中好像就是个数据库,用来存数据,每天都打交道,可能往深了想会想到事务、MVCC、索引、锁、sql优化等,其实仔细区剖析MySQL,会发现,还是有很多可以学习的地方,包括我们的分布式事务,很多用的就是MySQL处理分布式事务的原理。这篇文章一起学习。
418 0
|
存储 JSON 关系型数据库
MySQL 8.0 功能特性
MySQL 作为最流行的开源关系型数据库管理系统之一,不断推陈出新,满足用户不断增长的需求和期望。在本篇博客中,我们将探讨 MySQL 8.0 版本带来的一些令人振奋的功能特性。
241 0
|
SQL 索引
MySQL-优化分析
MySQL-优化分析
71 0
|
SQL 存储 关系型数据库
常用的MySQL 优化方法
常用的MySQL 优化方法
129 0