• 《MySQL实战45讲》阅读笔记


    基础篇

    01 | 基础架构:一条SQL查询语句是如何执行的?

    1.看一件事不要直接陷入细节,先鸟瞰全貌,从高维度理解问题

    2.SQL语句在MYSQL中的执行过程

    MySQL可分为server层和存储引擎层

    Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等

    存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎

    连接器:

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

    认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限

     数据库里面,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。

    连接的过程较为复杂,建议使用长连接,但是用长连接可能会导致MySQL内存内用高。

    查询缓存:

    之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中

    不建议使用查询缓存,因为查询缓存失效非常频繁,对一个表有更新,该表上的查询缓存就会全部失效。

    MySQL 8.0 版本直接将查询缓存的整块功能删掉了

    分析器:

    首先识别字符串分别是什么,代表什么,接着做语法分析,判断是否满足MySQL语法。

    优化器:

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

    执行器:

    开始执行的时候,要先判断一下你对这个表有没有执行查询的权限,如果没有,就会返回没有权限的错误(在工程实现上,如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。查询也会在优化器之前调用 precheck 验证权限)

    如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口

    在数据库的慢查询日志中可以看到一个 rows_examined 的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的

    在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同的

  • 相关阅读:
    shell的if-else判断结构
    YOLOv7改进---注意力机制: EMA基于跨空间学习的高效多尺度注意力、效果优于ECA、CBAM、CA | 小目标涨点明显 | ICASSP2023
    ceph浅谈
    Linux-组管理和权限管理
    数据结构与算法:树 顺序存储二叉树(二)
    Java并发基础
    医疗健康产品展
    让人上瘾的新一代开发神器,彻底告别Controller、Service、Dao等方法
    从零到上亿用户,我是如何一步步优化MySQL数据库的?(建议收藏)
    异地远程访问内网BUG管理系统【Cpolar内网穿透】
  • 原文地址:https://blog.csdn.net/kkjy_00/article/details/126090513