一条sql查询语句在Mysql内部是如何执行的?

一条sql查询语句在Mysql内部是如何执行的?

1 Mysql内部结构图

  • 要想清楚的知道一条简单的sql在Mysql内部是如何执行的,首先我们要了解Mysql内部有哪些组件。如下图所示:
    一条sql查询语句在Mysql内部是如何执行的?
Mysql的内部架构图

2 一条sql的执行流程

  1. 当我们需要执行一条sql语句的时候,首先要连接Mysql,这个时候Mysql的连接器负责连接,连接完毕后,然后进行权限验证,检查的用户是否有相应的读写权限。
  2. 如果你查询语句,首先要看一下缓存中是否有相应的记录,所谓的相应记录其实就是一个类似Map的结构,key-value,key是你的查询语句,value就是你的查询结果,如果有记录,直接将value返回,不进行后续操作。
  3. 如果缓存中没有记录,就会执行到分析器,所谓的分析器就是分析sql具体的语法是否是正确的,如果不正确直接报错,分析完语法就知道你具体想做什么操作,是读操作还是写操作。
  4. 语法没有问题,也知道了sql的具体是什么操作,但是不能直接去执行sql语句,要先经过优化器,优化器顾名思义优化sql语句的,提高执行效率。具体的如何优化可关注后续的文章。
  5. 到了最后了,不得不执行了,就通过执行器执行sql语句,将结果返给客户端。

3 注意事项:

  1. 连接器的主要事项: 如果采用短连接,客户端长时间没有动静就会断开连接,下次请求要重新建立连接,显然这是不可取的,默认采用长连接,但是长连接会出现内存会被占用的特别快,在Mysql5.7之后这个问题得到了解决。
  2. 缓存的注意事项: 大部分情况下是不采用缓存的,因为一张表的缓存可能会因为表中的一个写操作全部清空,如果数据库压力比较大的话,缓存命中率很低,所以在Mysql8.0版本直接将缓存功能去除了。

4 结束语

  • 这些是我学习的笔记,用自己的语言将sql的执行过程简单的描述一下,如果有不正确的地方,欢迎指正。