SQL语句执行流程

2021年11月20日 阅读数:2
这篇文章主要向大家介绍SQL语句执行流程,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1. 客户端执行sql语句 (在此以前会先进行用户名密码的链接,会去进行mysql的校验,详情查看mysql运行流程)mysql

2.sql语句会进入到命令分发器算法

2. sql语句在进行mysql服务器进行查询缓存,查询以sql语句做为记录,以语句做为key,结果做为valuesql

    假如当前的查询语句为“select count(*) from table_name” , 开启查询缓存后,回去查询当前这条语句是否存在,存在检查用户是否有权限访问内容(相似rbac操做),有权限返回结果(若是语句内有空格,匹配不上,会致使查询缓存失效)缓存

3. 命令解析器,会对sql语句进行解析,生成一个解析树,判断你是什么类型的操做(查询优化器select ,表变动(增删改)dml,表维护ddl,复制模块rep,状态模块status)服务器

4. 假如你是一条“select count(*) from table_name where id=1 and age > 10” 这样的操做,查询优化器会将“where id=1 and age > 10”条件取出来,根据本身的规则算法匹配查询,存在一个扫描区,会一直对磁盘进行扫描,找到对应的磁盘页数据内容ide

5. 返回数据优化

 

sql优化,指的也就是对磁盘的i/o操做次数和优化器的执行时间,不是i/o的操做速度(充钱解决)blog

 

解析器:分为句法扫描器,与语法规则模块索引

句法扫描器 =》整个查询语句分为多个令牌(一些不可分隔的元素,列名)it

“select count(*) from table_name where id=1 and age > 10”

如上面的sql, 句法解析器将每一个字节流都会分解为一个令牌

select
count
(
*
)
from
table_name
where
id
=
1
and
age
>
10

 语法规则(sql.yacc.yy)而后根据这些令牌sql.lex.h -> 关键字->生成解析树

SQL语句执行流程_查询缓存

 

 优化器:

 

1. 会选择合适的键,好比使用join的时候,会选择适合查找的键

2. 针对每一个表进行全局扫描,若是数据量过大,速度会慢

3. 若是是join查询,选择表的链接顺序

4. 对于where进行重写 ,删除没必要要的代码,减小没必要要的计算量,尽量的限制条件,方便查询有效率执行

   (join)删除不须要链接的数据表

5. order group 肯定是否可使用到索引

 (join)合并大的视图

6. 执行执行计划

 

我的理解