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,不同的索引等,它需要的成本都是不一样的。