小表JOIN大表更快,关键在于小表作驱动表可减少外层循环次数,配合大表连接字段的索引实现高效查找,降低总匹配开销、提升缓存命中率,并优化I/O性能。
小表 JOIN 大表更快,核心在于数据库执行连接时的算法机制和资源利用效率。它不是靠“表小所以快”的直觉,而是由嵌套循环连接(Nested Loop Join)的执行逻辑、索引配合、内存与 I/O 特性共同决定的。
数据库大多采用嵌套循环方式处理 JOIN:外层表每读一行,就去内层表中查找匹配项。
小表驱动大表的前提是:大表上用于 JOIN 的字段(如 order.user_id)必须有有效索引。
小表数据量小,更容易被整个加载进内存缓冲池(如 InnoDB Buffer Pool):

别机械数表里有多少行。真正该当驱动表的,是 经过 WHERE 条件筛选后行数最少的那个表。
orders 表有 500 万行,但加了 WHERE created_at > '2026-01-01' 后只剩 2000 行users 表只有 10 万行,却没有任何过滤orders 才是事实上的“小表”,应优先驱动