mysql调优-01 mysql基础层

背景:

mysql 查询慢,要解决,首先要知道它是哪里慢了,哪一个步骤慢了,想要知道哪里慢并且要知道怎样去优化,首先得对mysql的一些基本信息,比如基础层要有一定的了解。

 

mysql的基础层

mysql的架构图可以看一下,大致如下:

通过这个图,可以知道mysql的架构分三个层次,client -> server -> 存储引擎

接下来的比较多关于优化的,都会出现在存储引擎一块,所以也比较重要

(存储引擎:不同的存储引擎,对应的文件存在方式,锁类型,索引等的实现都是有一定的差异的)

 

详细步骤说明

(1)连接器:

  用户在客户端向mysql server发起一个连接请求,所以第一步是先到server的连接器,进行权限认证,账号密码匹配的工作。

(2)分析器:

  当验证成功之后,接下来是要对请求的语句进行分析,语句是不是正确的;分析器,对语句进行解析,一句sql,它是有对应的语句结构的,比如select, from, where, insert, update, delete 等等,把语句按关键字进行切分,切分后,进行词法分析,语法分析,最终变成抽象语法树(AST, Abstract Syntax Tree)。

(3)优化器

  为什么会有优化器呢,因为一个语句,要执行,它可能可以有很多种执行方式或顺序,不同的执行方式,它带来的成本是不一样的。比如三张表相互关联,是哪两张先进行关联查询,这个是由优化器去进行对应的选择。所以一个语句,没有一定的执行方式,不同的表,表数据量不同,执行顺序都会产生差异。

  优化器的优化策略有两种:基于规则的优化(RBO, Rule-Based Optimization),基于成本的优化(CBO, Cost-Based Optimization)。较多情况是为了追求更快,所以很多情况是基于成本的优化。

(4)执行器

  执行器就是用来跟存储引擎进行交互的,存储引擎提的又是磁盘里面的数据,所以执行器就是从磁盘里面读取数据,或写入数据的组件。

  与磁盘的交互,瓶颈基本就是在IO,所以为了提高效率,要做的就是减少IO的量,减少IO的次数。

 

以上是mysqlserver 较为重要的一些组件,不同的需求,不同的sql,不同的索引等,它需要的成本都是不一样的。

 

posted @ 2022-07-31 08:57  aaacarrot  阅读(30)  评论(0编辑  收藏  举报