美文网首页
mysql执行流程

mysql执行流程

作者: 森林中大鸟 | 来源:发表于2020-05-23 11:41 被阅读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指定。

    相关文章

      网友评论

          本文标题:mysql执行流程

          本文链接:https://www.haomeiwen.com/subject/sydkahtx.html