• MYSQL逻辑架构


    MySQL逻辑架构

    逻辑架构介绍

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cKlUr6gB-1658978162466)(network-img/u=3031081140,328241623&fm=253&fmt=auto&app=138&f=JPEG.jpeg)]

    MySQL插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离,可以根据业务的需求和实际需要选择合适的存储引擎。

    MySQL各层介绍

    • 连接层

      客户端的连接服务,主要完成客户端的连接处理,授权认证。在该层有一个线程池,每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。

    • 服务层

      Management Serveices & Utilities系统管理和控制工具
      SQL InterfaceSQL 接口。接受用户的 SQL 命令,并且返回用户需要查询的结果。比如 select from 就是调用 SQL Interface
      Parser解析器。 SQL 命令传递到解析器的时候会被解析器验证和解析
      Optimizer查询优化器。 SQL 语句在查询之前会使用查询优化器对查询进行优化
      Cache 和 Buffer查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取 数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key 缓存, 权限缓存等
    • 引擎层

      负责MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信。不同 的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取

    • 存储层

      数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

    相关指令:

    show profile:查看sql生命周期
    show variables like '%profiling%':查看 profile 是否开启(没有开启,执行 set profiling=1 开启)
    show engines:查看所有的数据库引
    show variables like '%storage_engine%':查看mysql默认存储引擎的命令:
    
    • 1
    • 2
    • 3
    • 4

    MySQL大致查询流程

    mysql 客户端通过协议与 mysql 服务器建连接,发送查询语句,先检查查询缓存(query cache)——它存储 SELECT 语句以及 相应的查询结果集。如果某个查询结果已经位于缓存中,服务器就不会再对查询进行解析、优化、以及执行。直接返回结果, 否则进行语句解析

    语法解析器和预处理:首先 mysql 通过关键字将 SQL 语句进行解析,并生成一颗对应的“解析树”。mysql 解析器将使用 mysql 语法规则验证和解析查询;预处理器则根据一些 mysql 规则进一步检查解析数是否合法。

    查询优化器:当解析树被认为是合法的了,并且由优化器将其转化成执行计划。一条查询可以有很多种执行方式, 最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。

    SQL执行顺序:

    FROM 
    ON 
     JOIN 
    WHERE 
    GROUP BY  
    HAVING SELECT
    DISTINCT 
    ORDER BY  
    LIMIT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    InnoDB | MyISAM:

    对比项MyISAMInnoDB
    外键不支持支持
    事务不支持支持
    行表锁表锁,即使操作一条记录也会锁住整个表, 不适合高并发的操作行锁,操作时只锁某一行,不对其它行有影响, 适合高并发的操作
    缓存只缓存索引,不缓存真实数据不仅缓存索引还要缓存真实数据,对内存要求较高,而且内 存大小对性能有决定性的影响
    B树索引支持支持
    批量插入

    实际使用中应该如何选择存储引擎:

    InnoDB存储引擎:因为InnoDB存储引擎支持事务,所以对于要求事物完整性的场合需要选择InnoDB,比如数据操作除了插入和查询以外还包含有很多更新删除操作,像财务系统等对数据准确性要求较高的系统。

    MyISAM存储引擎:如果系统是以读操作和插入操作为主,只有很少的更新删除操作,并且对事务的支持没有要求

  • 相关阅读:
    位深bitdepth是什么
    博客园商业化之路-众包平台:从第一单看基于「开发任务」的定位
    Linux漏洞SSL/TLS协议信息泄露漏洞(CVE-2016-2183) - 非常危险(7.5分) 解决办法!升级openssl
    Java 重写、重载,这篇文章看了就明白
    c++ 中 auto, auto & 和 const auto & 的区别
    【博客440】Linux netlink:用户态进程与内核态进程通信
    IVariantArray的注意事项:AE 调用GP工具方法介绍及常见错误“对 COM 组件的调用返回了错误 HRESULTE_FAIL
    GIS开发入坑(二)--ArcGIS影像切片并使用GeoServer发布
    2022-8-20 B树和B+树
    Java进阶——IO 流
  • 原文地址:https://blog.csdn.net/weixin_46129192/article/details/126030695