MySQL优化学习笔记(三) MySQL架构

MySQL架构图如下:


客户端通过Tcp协议来访问数据库。当我们执行一个SQl时,步骤如下:

1、客户端向服务器端访问时,先去查询缓存(类似Redis)

MySQL自带查询缓存,首先对传过来的SQL直接进行哈希散列算法(MD5、SH1、SH2)进行转换,把哈希值当做Key与查询缓存中的Key进行对比,如果查询缓存中有该Key,直接返回Value也就是查询结果。

哈希有单一定向性,一个空格,一个标点都会有影响,因此select * from test;和 select *   from test不一样,在查询缓存时可能因为有空格查不到。

2、缓存中不存在,则到解析器,解析为一个解析树。

解析器 解析关键字是否有拼写错误、顺序错误,如果解析出现问题,会返回解析内容,在Navacat中体现为错误信息。

3、解析器无误,下一步进行预处理器,产生一个新的解析树。

预处理器是检查表、列是否正确,是否在SQL命令中出现歧义。

4、MySQl自带一个查询优化器。

内置的查询优化器会对你的SQL进行优化,优化完成后生成一个执行计划。

5、执行计划会去查询目前这张表应用的引擎,通过引擎访问数据物理文件。

(引擎--MySQL跟数据文件的一个接口或纽带,有MyISAM、InnoDB等),不同的存储引擎应用的时候,生成的是不同的物理文件。

以默认引擎InnoDB为例,MySQl数据库的物理文件有以下三种:


其中:

opt文件存储的数据库的编码

frm存放表结构

idb存放数据集索引

6、把查询结果返回给客户端,同时存入查询缓存。

你可能感兴趣的:(MySQL优化学习笔记(三) MySQL架构)