首页/数据/SQL 速查/EXPLAIN 中的表访问顺序
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条变更与事务52 条
性能与执行计划72 条

EXPLAIN 中的表访问顺序

多表连接时 EXPLAIN 按访问顺序逐行列出:同 id 的行属于同一查询块,自上而下就是连接发生顺序。

SQL 速查数据更新于 2026-10-12

示例

示例
EXPLAIN
SELECT u.name, o.total
FROM users u
JOIN orders o ON o.user_id = u.id
WHERE u.city = 'shanghai' AND o.status = 'paid';

-- users 行在上、orders 行在下:先访问 users(驱动表),再按索引查 orders
id查询块编号;子查询与 UNION 会引入新的块
驱动表先访问并产出连接键的一方;结果小、过滤强的一方更适合做驱动
干预方式改写连接顺序、STRAIGHT_JOIN、JOIN_ORDER 提示;PostgreSQL 可调 join_collapse_limit

易错点

  • 按 SQL 书写顺序推断执行顺序:优化器会重排连接顺序,以 EXPLAIN 实际输出为准
  • 把多个 id 的行混在一起读:不同 id 是不同查询块,连接顺序只在同 id 内部有意义

数据来源与参考

  • MySQL 8.0 Reference Manual §8.8.2 EXPLAIN Output Format
  • PostgreSQL Documentation §14.1 Using EXPLAIN
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌