mysql一条查询语句的执行流程。

mysql架构图

在这里插入图片描述

登录mysql

mysql -h i p − P ip -P ipPport -u$user -p

查看连接mysql的线程

show processlist查看mysql服务正在连接的请求

最大空闲连接时间由mysql wait_timeout参数设置默认值8h

查询缓存

执行的sql语句和结果已key-value存在,存在缓存直接返回,不存在查询,在缓存。 ps:适用于静态表,数据基本不会变更的,db数据只要变更,会清除该表所有缓存。

你可以将参数 query_cache_type设置DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定,像下面这个语句一样

select SQL_CACHE * from T where ID=10; mysql8.0将缓存功能已移除

分析器

  • “词法分析”:你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。
  • “语法分析”:根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法

优化器

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序

执行器

  • 校验权限
  • 执行sql

Q:如果表 T 中没有字段 k,而你执行了这个语句 select * from T where k=1, 那肯定是会报“不存在这个列”的错误: “Unknown column ‘k’ in ‘where clause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢?

A:分析器阶段,mysql会在词法分析阶段分析,表是否存在,字段是否存在等

文章笔记来自极客时间《MySQL实战45讲》

猜你喜欢

转载自blog.csdn.net/weixin_45582733/article/details/121192790