MySQL 优化实战
最近几天都在优化之前的 SQL,一看 SQL 都是 5-6 个表连表还有各种子查询,看起来主打一个头大。
正常的优化思路心路历程分享一下: 首先是查看每一个表的数据,根据表数据查询是否存在合理,然后根据数据量进行连表查询,由少到多的一个过程,尽可能减少表的行数,然后再根据对应的数据是否有索引覆盖。
为什么要用 MCP ? 因为用 MYSQL MCP 可以减少自己对于字段的识别和查询,以及索引是否覆盖。
MySQL 联表查询流程详解
MySQL 的联表查询(JOIN)是通过将多个表中的数据按照关联条件组合起来的过程。以下是联表查询的基本流程和内存处理方式:
联表查询的基本流程
-
确定驱动表:
- MySQL 优化器会选择一个表作为驱动表(通常是较小的表或WHERE条件筛选后结果较少的表)
- 驱动表的数据会被首先读取到内存中
-
处理驱动表:
- 执行驱动表的WHERE条件过滤
- 将过滤后的结果存储在内存的join buffer中
-
连接被驱动表:
- 对于驱动表中的每一行(或一批行),在被驱动表中查找匹配的行
- 根据JOIN条件(ON子句)进行匹配
-
组合结果:
- 将匹配的行组合成结果集的一行
- 如果使用了LEFT/RIGHT JOIN,即使没有匹配也会保留驱动表/被驱动表的行