IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

MySQL源代码的海洋中游弋 初探MySQL之SQL执行过程

MySQLOPS 数据库与运维自动化技术分享 2012-05-15 23:30:12 累计浏览 4,043 次
本机暂存

导读:

2012年5月12日,MySQL技术群-北京技术圈的MySQL爱好者,聚集搜狐公司,举办MySQL数据库技术沙龙,本文内容为搜狐DBA团队古雷(外号:古大师,因研究佛学而来)分享的MySQL之SQL执行过程,先整理成文章的方式供大家阅读,古大师也是mysqlops中文网的技术编辑之一。

序言:

  • 不积跬步,无以至千里;不积小流,无以成江海——《劝学》荀子

  • 吾生也有涯,而知也无涯。以有涯随无涯,殆已——《养生主》庄子

Group by

  • select name1 from test group by name1;

  • 从InnoDB存储引擎表读出一条记录,写入临时表,循环往复

  • 临时表中,group by的key(本例中为name1)

    • -每个KEY值只有一行记录

    • -(相同KEY值写入,检测到重复键错误,忽略此错误并继续)

  • 从临时表中读取记录(全部或KEY)

  • 排序(filesort)

  • 发送排序结果

Group by + sum

  • select sum(id) from test group by name1;

  • 从InnoDB存储引擎表读取一条记录,写入临时表,循环往复

  • 临时表中group by的key(本例中为name1)

    • -有一个hash索引

    • -每个KEY值只有一行记录

    • -写入临时表每行记录时,更新相同KEY的sum值

  • 以group by的key对临时表排序(filesort)

  • 发送排序结果

  • If you use GROUP BY, output rows are sorted according to the GROUP BY columns as if you had an ORDER BY for the same columns. To avoid the overhead of sorting that GROUP BY produces, add ORDER BY NULL

临时表写入的痕迹1

group by使用索引时,不需要临时表

  • 从索引中读取记录,计算count,由于索引是按照group by的key排序的,因此可以边读记录边计算当前key的count,当读的key值要变化时,则刚刚计算的count值就是那个key的最终count值,把结果发送给客户端,再继续从索引读以下记录。

什么是Nested Loop Join(嵌套循环算法)

DEPENDENT SUBQUERY

DERIVED(派生表)

原图已失效

两表JOIN + ORDER BY

  • 循环读取ttt表的记录,写入cache,直至都写完

  • 循环从tttt表中读取记录

  • 每读一条,再循环读取cache中记录,并做比较

  • 满足条件的记录写入临时表

  • 对临时表排序

  • 发送结果

  • Using join buffer是循环读取big表并与join buffer中的保存的table2记录比较

  • Using temporary是保存匹配的记录,然后需要排序

总结

  • 之前看手册上的诸多概念,有空中楼阁的感觉

  • 通过跟踪源码,则逐渐有脚踏实地的感觉

  • 希望真正看懂explain的输出

  • 不积跬步,无以至千里;不积小流,无以成江海——《劝学》荀子

  • 吾生也有涯,而知也无涯。以有涯随无涯,殆已——《养生主》庄子

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,253)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,401)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  4. Mysql监控指南 (累计阅读 21,352)
  5. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  6. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,058)
  7. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  8. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,909)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,709)
  10. 深入浅出INNODB MVCC机制与原理 (累计阅读 9,693)