一条查询语句执行的过程
一条 SQL 语句从客户端发送请求开始,到服务器后经过服务器处理后进行查询后返回结果的生命周期过程
查询语句执行过程
中间部分代表数据库的一些内存或者后台的一些进程,通常叫做实例,右边代表真实的物理数据库,通常叫做物理存储。
连接器
首先,服务端的连接器(监听器)对客户端的请求经过一系列检查,合法后建立一个连接进程和客户端进行对接。
mysql 客户端建立连接实例:
# 连接数据库
mysql -h 127.0.0.1 -P 3306 root test_db -p
# 查看后端进程
# mysql 是一个单进程多线程的模式,所以是 processlist
show processlist;
分析器
连接后再与服务器通信就会通过建立的进程,SQL 语句经过分析器会进行语法检查,语义检查以及访问权限。通过检查后会对 SQL 拆分生成解析树。
优化器
经过解析的解析树会被送到优化器进行查询。优化器的作用是选择出最优的一条 SQL 执行计划。
执行计划:数据库查到相应结果的执行步骤。
软解析
数据库并非每次都会对语句进行优化,当发现 SQL 语句一致时会对语句进行模板保存,但是对语句的相似性要求很严格,多一个空格都不行。有些数据库会提供占位符,当你每次查询的时候数据库使用实际的值替换占位符,通过缓存中的执行计划进行执行。
热点数据
为了提高数据库对磁盘的访问性能,数据库通常会预留很大一部分内存用来保存热点数据进行缓存。
执行器
经过优化的语句通过执行器执行 SQL,得到结果后返回前端。