zoukankan      html  css  js  c++  java
  • MySQL之架构简单分析

    上图为MySQL的简易架构图,给您有一个大概的概念,下面我将为您进行进一步的分析。

    连接器:

    当连接MySQL数据库时,等待的将是MySQL服务端的连接器;连接器的职责是和客户端建立连接、获取权限、维持和管理连接。客户端连接命令一般是如下所示(建议:不要在命令中显示添加登入密码):

    mysql -h$ip -p$port -u$user -p$password

    查询缓存:

    建立完连接后,就可执行select语句。执行就会走向查询缓存。

    MySQL拿到这个查询请求后,就会先到缓存中看看,之前是不是执行了该语句。在查询缓存中数据是以key-value形式存在的,key为执行的查询请求,value为查询结果。如果执行了就直接从缓存中把结果返回给客户端,请求结束。如果语句不在缓存中,就执行后续复杂操作。

    在大多数情况下不建议使用查询缓存,为什么呢?因为查询缓存往往弊大于利。

    查询缓存的失效非常频繁,只要对表进行了更新,该表的中查询缓存全部清除。所以往往很多时候,缓存还没使用就被清除了。对于更新压力很大的数据库来说,查询缓存的命中率很低。如果你的业务中存在一张静态表,很长时间才会更新一次。比如,系统配置表,那这张表的查询才适合查询缓存。

    该功能是自动配置的。可以将参数 query_cache_type 设置成 DEMAND ,这样对于默认的SQL语句就不会使用查询缓存。而对于确定的查询语句,可以使用 SQL_CACHE 显示指定,比如如下语句:

    select SQL_CACHE * from t where id = 1;

    注意:在MySQL8.0之后的版本,把查询缓存模块移除了。

    分析器

     在没有命中查询缓存后,MySQL开始真正执行语句了。这时MySQL对该语句进行解析。

    分析器首先进行词法分析,一条sql由多个字符串和空格组成,MySQL需要分析出这些字符串是什么,代表什么。

    做完识别之后,进行语法分析。根据词法分析的结果,语法分析器会根据语法规则对sql语句进行分析,是否符合MySQL的语法规则。

    优化器

    执行完分析器后,MySQL就知道该sql语句要干什么了。在开始执行之前,要经过优化器的处理。 

    优化器在表里存在多个索引时,选择执行哪个索引;或者一个语句有多表关联时(join),选择各表的连接顺序。

    执行器

    MySQL通过分析器知道了该语句要做什么,通过优化器知道该怎么做,于是进入到了执行器阶段,开始执行语句。

    开始执行之前,首先会判断用户是否有对表的执行权限(如果是在查询缓存得到结果,会在返回结果之前进行权限校验),如果没有会报错.。如果有权限,就打开表继续执行语句。打开表的时候,执行器会根据表的引擎定义,去使用引擎提供的接口。

    存储引擎

    MySQL区别于其他数据的最具有点的是存储引擎接口模块,MySQL可进行插拔存储引擎。

    MySQL的存储引擎有很多种,比如:InnoDB、MyISAM、ISAM、Memory等。在MySQL5.6之前,默认存储引擎是MyISAM,而在该版本之后默认的是InnoDB。下表是两者之前的区别:

      InnoDB

    MyISAM

    存储文件

    .frm 表定义文件,.ibd 数据文件和索引文件

    .frm 表定义文件,.myd 数据文件, .myi 索引文件
    表锁、行锁 表锁
    事务 支持 不支持
    CRUD 读、写 读多
    count 扫表 专门存储的地方
    索引结构 B+树 B+树

     

    近期在学习MySQL数据库, 后续将会持续更新学习随笔。

  • 相关阅读:
    沉淀再出发:在python3中导入自定义的包
    沉淀再出发:java中的equals()辨析
    沉淀再出发:web服务器和应用服务器之间的区别和联系
    沉淀再出发:jetty的架构和本质
    沉淀再出发:dubbo的基本原理和应用实例
    沉淀再出发:OpenStack初探
    沉淀再出发:Spring的架构理解
    沉淀再出发:关于IntelliJ IDEA使用的一些总结
    沉淀再出发:spring boot的理解
    沉淀再出发:Bean,JavaBean,POJO,VO,PO,EJB等名词的异同
  • 原文地址:https://www.cnblogs.com/etoumao/p/14117167.html
Copyright © 2011-2022 走看看