mysql执行流程

2020-05-23  本文已影响0人  森林中大鸟
image.png

server层

包括 连接器,查询缓存,分析器,优化器,执行器等,所有内置函数,所有跨存储引擎的功能(存储过程,视图,触发器)

连接器

负责跟客户端建立连接,维持连接,管理连接,获取权限。
命令:

mysql -hip -Pport -u$user -p
命令执行流程:

  1. 创建tcp连接
  2. 输入用户名密码(密码也可以直接跟在-p后面,不推荐)
  3. 认证不通过执行结束;通过则读取用户权限(从权限表查询,后续该连接的权限判断都依赖此时读取的权限。即使权限被修改,对此连接来说,不会生效,需要重新建立连接才能使用新的权限)
  4. 连接超时后会自动断开由参数wait_timeout控制默认8小时
  5. 数据库一般使用长连接,SQL在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放,所以长连接可能会出现oom
    可以定时断开连接。进行大内存大查询后断开连接。
    MySQL 5.7或更新版本,可以在每次执行一个比较大的操作后,通过执行
    mysql_reset_connection来重新初始化连接资源。这个过程不需要重连和重新做权限验证,
    但是会将连接恢复到刚刚创建完时的状态

查询缓存

  1. 上次查询执行后会将sql语句和查询结果以k-v的形式存在缓存中,每次表更新会清除缓存。
  2. 适用于不常更新的表使用。可以显式指定使用缓存

mysql> select SQL_CACHE * from T where ID=10;

  1. MySQL 8.0版本直接将查询缓存的整块功能删掉

分析器

分析是否满足sql语法,不满足则报错并提示首次出现错误的地方。

优化器

从多个可选的执行方案中选择最优的执行方案

执行器

  1. 校验对表是否有权限
  2. 如果有,继续执行,操作引擎,返回结果

存储引擎

负责存取数据,插件式的架构,支持innodb(5.5之后默认的),myisam,memory等;建表时可以通过engine=memory指定。

上一篇下一篇

猜你喜欢

热点阅读