news 2026/10/13 13:00:15

MySQL 核心机制精讲:B+树查询、Buffer Pool、COUNT 优化与 CHAR/VARCHAR 实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 核心机制精讲:B+树查询、Buffer Pool、COUNT 优化与 CHAR/VARCHAR 实战指南

一、请详细描述一下MySQLB+树查询数据的过程

B+树查询数据分两个阶段: 1. 先从根节点往下定位到叶子节点。 2. 在叶子节点内部定位到具体的数据行。

  1. 第一阶段是树的垂直查找,从根节点开始,要查询的键值和节点内存储的索引的键值作比较,通过二分查找,来确定落在哪个区间,重复这个过程,直到找到根节点。一棵三层的B+树最多经过三次磁盘IO就可以定位到叶子节点。
  2. 第二阶段是页内查找,叶子节点也是一个16KB大小的数据页,一个叶子节点能存很多数据,InnoDB通过目录页来加速查找。目录页把记录分成了多个组,每个槽记录组内的最大数;通过对目录页的二分查找能定位到对应的组,组内是通过单向链表连接的,通过对单项链表遍历就能找到目标记录。

整个过程:根节点->中间节点->叶子节点->二分查找目录页->遍历单向链表

二、Buffer Pool的作用

缓存热点数据页

实际查询时不是每次都从磁盘中读,Buffer Pool会缓存热点数据页,所以实际的查询过程是:

  1. 先在Buffer Pool中查询,有就直接用,不用走磁盘
  2. 没有就从磁盘里读取到数据页并写进Buffer Pool

三、MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?

三者都是统计行数的聚合函数,核心区别是对于null处理不同

  1. count(*)和count(1)会统计所有的行,包括null。
  2. count(字段名)不会统计字段名内为null的行。

四、如果要统计一张 5000 万行的订单表有多少条记录,直接 count(*) 太慢,你怎么优化?

  1. 如果允许存在误差的话,可以直接SHOW TABLE STATUS拿估算值,毫秒级反应。
  2. 如果不允许出现误差,又要求快速响应,可以在Redis里维护一个计数器。要处理好缓存一致性问题,例如事务消息或定期校验

五、count(*) 走的是主键索引还是二级索引?

  • 如果有二级索引的话走的是二级索引,因为二级索引只存储索引列和主键,占用空间小,扫描的数据页少,IO开销更低。
  • 具体可以用explain去分析key命中的索引

六、MySQL中CHAR和VARCHER的区别是什么?

CHAR是定长的,VARCHAR是变长的

  1. CHAR(10)不管存几个字符,都占10个字符的空间,不够用空格填充。
  2. VARCHAR(10)存多少占多少,最后在花1-2个字节记录长度。

七、VARCHAR(N) 的 N 会影响排序性能

  • MySQL 执行 ORDER BY 时会用到 sort_buffer,如果要排序的数据放不下,就得走 双路排序:先把排序字段和主键放进 sort_buffer 排好序,再回表取完整数据。多了一次回表,性能差不少。
-- a、b、c 都是 VARCHAR(1000),即使实际数据很短SELECTa,b,cFROMt1WHEREa='面试鸭'ORDERBYb;-- MySQL 按每行 3000 字符算空间,sort_buffer 放不下就走双路排序

八、CHAR 读取时会自动去掉尾部空格

CHAR 存储时会用空格填充到定长,读取时 MySQL 会自动去掉尾部空格。这可能导致意想不到的问题:

CREATETABLEt(cCHAR(5));INSERTINTOtVALUES('abc ');-- 故意存两个空格SELECTCONCAT('[',c,']')FROMt;-- 结果是 [abc],尾部空格被去掉了

九、什么时候用 CHAR?

别看 CHAR 好像很鸡肋,在特定场景下还是有优势的:

1)存储固定长度的编码,比如 ISO 国家代码 CHAR(2)、MD5 摘要 CHAR(32)、UUID 去掉横杠后 CHAR(32)

2)存储单字符的状态标记,比如性别 CHAR(1) 存 M/F

3)频繁更新的短字段,CHAR 不会产生碎片,VARCHAR 长度变化可能导致页分裂

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/13 10:41:39

先知AI如何破解男装行业的数据迷局?

在数字化浪潮席卷之下,男装行业正面临前所未有的挑战与机遇。库存积压、设计同质化、消费者需求难以精准捕捉,成为许多企业增长的绊脚石。北京先智先行科技有限公司敏锐洞察到这一痛点,凭借其深厚的行业积累与人工智能技术,推出了…

作者头像 李华
网站建设 2026/10/12 5:36:16

多变量单步时序预测 | TCN-LSTM时序卷积网络长短期记忆网络时间序列预测MATLAB代码

一、研究背景 本代码实现了一种TCN-LSTM混合神经网络模型,用于时间序列预测任务。TCN(时序卷积网络)具有并行计算能力强、感受野可控的优点,LSTM(长短期记忆网络)则擅长捕捉长期依赖关系。两者结合旨在提升时间序列预测的精度与稳定性。 二、主要功能 从Excel文件中读取…

作者头像 李华
网站建设 2026/10/9 4:02:54

多变量单步时序预测 | TCN-BiLSTM时序卷积网络双向长短期记忆网络时间序列预测MATLAB代码

一、研究背景 该代码实现了一种 TCN-BiLSTM 混合神经网络模型,用于时间序列预测任务。TCN(时序卷积网络)能够有效提取局部时序特征并控制感受野,而双向LSTM(BiLSTM) 则能同时利用过去与未来的信息,增强序列建模的双向依赖关系,尤其适用于具有前后文依赖的时间序列预测…

作者头像 李华
网站建设 2026/10/9 4:02:57

互联网核心系统架构白皮书:从 MySQL 到千万 QPS 的全链路工程体系

流量工程 缓存体系 写削峰 CQRS 异构存储 事件驱动 金融级稳定性设计 一、什么才是真正的“千万 QPS”? 先给出一个行业级结论: 千万 QPS 从来不是 MySQL 的能力,而是整个系统工程能力。 MySQL 在真正的千万 QPS 架构中,只承担 0.1%~1% 的请求量。 真实系统 QPS 分担…

作者头像 李华
网站建设 2026/10/8 19:20:20

NVIDIA点燃HBM4竞速赛:12层量产前夜,16层博弈定生死

CES 2026的舞台上,NVIDIA新一代Rubin GPU的亮相,不仅宣告了AI算力的又一次跃迁,更将HBM的竞争推向了白热化。(2026Q1 3D NAND价格翻倍|NV引爆AI存储行情-万字研究报告) 作为当前HBM4的独家初始客户,NVIDIA对每引脚速度超11Gbps的硬性要求,直接改写了SK海力士、三星、美…

作者头像 李华
网站建设 2026/10/10 23:22:20

GESP认证C++编程真题解析 | B4262 [GESP202503 三级] 词频统计

​欢迎大家订阅我的专栏:算法题解:C与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选…

作者头像 李华