文章目录

    • MySQL架构图
    • MySQL执行流程
      • 简要执行流程:
      • 详细执行流程
    • 存储引擎
    • SQL执行顺序
    • 存储结构
    • 实战演示

MySQL架构图

图例如下:

server层:
Connection Pool :连接池,负责管理持有所有的连接,采用BIO的技术,承载能力有限。此外还进行用户的鉴权,线程重用,内存检查,cache管理等等;
SQL Interface:
Parser:解析器,
Optimizer:优化器,
cache&buffer:缓存,
插件层:各种存在的地方
文件层:数据存储的地方

MySQL执行流程

简要执行流程:

详细执行流程

存储引擎


只有innodb支持事务。
对于myisam来说,它存储了全表的总数记录,所以 select count(*)比较innodb要快;

SQL执行顺序


实际上,查询优化器不一定严格按照这种顺序因此执行顺序不太重要。

存储结构

innodb引擎默认按照主键索引的结构来存储,索引的结构采用B+树这种数据结构。

为什么采用B+树的存储结构?

  • 基于B+树的特性及优势,数据按照数据块来存储,每一块上可能有多条数据,当某条数据被使用了,那么有可能他前后的数据也有极大的可能被使用,直接将这一块放入内存中,从而减少I/O的次数,极大提高了查询效率。
  • 另一方面,B+的叶子结点采用双向链表的方式串联起来,在范围查询时,借助链表指针可以轻松找到下一块的位置,不需要回溯非叶结点的索引记录;
  • 另外,基于B+树非叶结点存索引指针,叶子结点存储数据的特性,保证单表数据达到2100万极限值仍能保证查询效率;

MySQL一个页大约是16K,假设常规的表一个记录是1K,一个页大约能存储16个记录;通常情况,主键类型是big int,bing int本身占8个字节一个针指针的大小大约6个字节,一般索引页都是一个主键值跟一个指针,这样就是14个字节,161024/14=1170个数据。B+一般树三层,三层下来是11701170*16 = 2100000;

实战演示