美文网首页
MySQL - 基础架构

MySQL - 基础架构

作者: 52HzBoo | 来源:发表于2019-11-29 09:34 被阅读0次

    MySql的基础架构分成两大部分(如图):

    Server层 : 连接器 、查询缓存、解析器、优化器、执行器
    数据引擎层: InnoDB 、 MyISAM 、...... 等

    2019-11-27_5dde1194ab3c1.png

    连接器

    • 基础连接处理(建立连接验证、用户的权限)
    • 管理缓冲用户连接,线程处理等需要缓存的需求,为通过认证安全接入的客户端提供线程。
      注:已建立连接如果权限发生改变,没重新连接授权,客户端的连接权限依然是没改变的

    查询缓存

    • 对 select 开头语义的查询结果进行缓存(K --> 查询语句 ,V --> 结果集)
    • MySql默认不开启缓存,一般非业务的静态表不建议开启查询缓存。频繁的新增、修改、删除等操作会导致缓存失效,再创建导致额外的性能开销。
    • Mysql也提供了这种“按需使用”的方式。你可以将参数 query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定,像下面这个语句一样:
      mysql> select SQL_CACHE * from T where id =100;
      Mysql8.0版本已经移除查询缓存功能。

    分析器

    • 主要分析SQL的语义:select 、update 、 inster 、delete ,from,on,join,where ... 生成新解析树,传递到优化器进行优化策略选择 ;
    • 语义检查: 分析过程如果语法不符合语义的标准则会返回异常提示。

    优化器

    • 将前面分析器的解析树转换成执行计划,并进行评估最优。
    • 表有多个索引,存在 join 关联 where 条件执行的顺序 如例:
      mysql> select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;
      是先从t1表取出t1.c = 10 在关联 t2表后判断 t2.d =20 还是反过来的逻辑

    执行器

    • 执行器在接收优化器评估的最优的语句 开始执行的时候,先判断这个表 T 有没有查询的权限
      (在工程实现上,如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。查询也会在优化器之前调用 precheck 验证权限)。
    • 有权限情况下才会打开表,执行器根据表的引擎定义去使用引擎接口(如:InnoDB 为例)
      查询表 name = liu,没有索引的情况下,调用引擎重复取下一行进行判断,直到最后一行。

    相关文章

      网友评论

          本文标题:MySQL - 基础架构

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