zoukankan      html  css  js  c++  java
  • SQL查询语句的执行

    执行过程

    • 连接器 - 管理连接,权限验证
    • 查询缓存 - 命中缓存直接返回结果
    • 分析器 - 词法分析 ,语法分析
    • 优化器 - 分析执行计划,选择最优的执行计划
    • 执行器 - 操作存储引擎接口,返回结果

    不同的存储引擎共用一个Server层

    连接器

    连接器负责跟客户端建立连接、获取权限、维持和管理连接

    客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数wait_timeout控制。

    连接断开后,继续需要重连才能执行客户请求。

    通常数据库连接推荐使用长连接。

    查询缓存

    • 拿到一个查询请求后,会先到查询缓存看看,之前是否执行过这条语句。
    • 语句不在查询缓存中,就会继续后面的查询阶段。
    • 执行完成后,执行结果会被存入查询缓存中。

    查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。

    对于更新压力大的数据库来说,查询缓存的命中率会非常低.

    8.0开始彻底没有这个功能了

    分析器

    对SQL语句做解析

    • 先做词法分析。分析字符串分别是什么,代表什么。
    • 语法分析,根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个SQL语句是否满足MySQL语法。

    优化器

    优化器的作用就是决定选择使用哪一个方案执行的效率更高。

    比如:

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

    优化器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段。

    执行器

    通过优化器知道了该怎么做,于是就进入了执行器阶段。

    打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口,进行。

    慢查询日志中

    rows_examined的字段,表示这个语句执行过程中扫描了多少行。

  • 相关阅读:
    第十七节(is-a 、is-like-a 、has-a,包和 import )
    第十六节(Object类(toString() 、finalize、equals方法)
    第十五节(多态,接口和抽象类的区别,类之间的关系)
    第十四节(接口(行为))
    第十三节(super关键字、final关键字、抽象类))
    .gitignore立即生效
    find & xargs 参数传递
    zsh: command not found: j
    将文件转化为源代码
    C读文件相关的调用
  • 原文地址:https://www.cnblogs.com/ginko/p/11609453.html
Copyright © 2011-2022 走看看