首页/数据/数据库速查/连表顺序与驱动表选择
性能与调优57 条

连表顺序与驱动表选择

优化器按成本选驱动表:小结果集先驱动、被驱动表走索引是理想形;驱动表选错(统计失真)时可用 STRAIGHT_JOIN 临时纠偏并分析根因。

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

观察与纠偏

观察与纠偏
EXPLAIN SELECT ... FROM small_filter_table s
JOIN big_table b ON b.id = s.big_id;
-- 观察输出顺序:s 在前为驱动表
-- 临时强制顺序(谨慎):
SELECT STRAIGHT_JOIN ... FROM s JOIN b ON b.id = s.big_id;
理想驱动表小(rows 小),被驱动表 eq_ref/ref
异常大表驱动 + 被驱动表 ALL + join buffer
治理补统计、改写法、最后才调 optimizer hint
连表顺序是成本优化的结果而非原因;被驱动表缺索引才是根本问题。

易错点

  • STRAIGHT_JOIN 写进业务 SQL 长期固化:数据分布变化后反而变慢,属临时手段
  • 被驱动表无索引只调大 join_buffer_size:内存换时间,扫描量没变

数据来源与参考

  • MySQL 8.0 Reference Manual: Optimizing JOIN Queries
  • MySQL 8.0 Reference Manual: STRAIGHT_JOIN

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌