赞
踩
基于5.7版本,8.0版本去除了查询缓存
下面我们开始说明一下执行流程:
首先MySQL是C/S应用架构。
客户端 也就是咱们所进行SQL语句查询端
服务器端 简单来说 进行sql语句的执行 与 数据存储。
MySQL服务默认监听3306端口,一般我们都会使用TCP的方式进行连接。
数据库的连接也是有限制的 一般默认连接数是 100 或 151 。
show variables like '%max_connections%';
set global max_connections = 200;
查询缓存的功能 在MySQL8.0 已经被移除了
如图示可以看到,在5.7版本中 连接上数据库后 是先进行查询缓存的,如果SQL语句一模一样、且所查表中数据没有变化的情况,是直接会秒查询出来。
所以,对于有大量更新内容时,有些浪费资源了。
先从两个方面来讲 词法解析 与 语法解析
检查单词是否正确、 检查关键字的应用
先一下SQL语句在执行时的顺序是怎样的
1-from 2-on 3-join 4-where 5-group by 6-having 7-select 8-order by 9-limit
根据这些顺序 及语法的检查,MySQL会生成一个数据结构,这个结构我们称为 “解析树”
经过了分析器之后,使我们的SQL语法没有问题了,但是在真正执行SQL之前 还需要经过优化器的优化处理。优化器会对你的SQL选择它认为最优的执行方案进行执行
优化器的作用有:
·读取SQL解析树
·对SQL语句进行默认优化 ---- 选择对应索引
·生成执行计划。 (explain select * from table 可以看到执行计划)
首先会对当前用户进行执行权限校验,如果没有权限,就会返回没有权限的错误:ERROR 1142 (42000): SELECT command denied to user。
如果有权限,就会去调用引擎的接口,返回接口执行的结果。
不同的存储引擎存放数据的方式不同,产生的文件也不一样,innodb是一个 myisam 是两个。
在没有指定存储引擎的时候,MySQL会使用默认的引擎。5.5.5之前默认存储引擎是 MyISAM
5.5.5之后默认使用的是 InnoDB。
存储引擎如何选择 详解,可以查阅相关资料。
查询一条SQL的流程 先聊到这啦!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。