JOIN顺序影响执行计划与性能应将过滤后结果集最小的表作驱动表避免ON中使用函数导致索引失效改用范围条件。JOIN顺序直接影响执行计划和性能数据库优化器不是万能的尤其在多表关联时JOIN 的书写顺序常被当作物理执行顺序处理。MySQL 5.7 及更早版本、SQL Server 默认都按 FROM 后的表顺序驱动PostgreSQL 虽有代价估算但小样本统计信息下也容易选错驱动表。把过滤条件最严、结果集最小的表放在 FROM 后第一位即驱动表例如用户表 users 有千万级但加了 WHERE status active 后只剩 2 万就该让它当驱动表避免在 ON 条件里写函数比如 ON DATE(created_at) DATE(other_date) 会失效索引改用范围条件ON created_at other_date::date AND created_at 对大表 JOIN优先考虑走索引字段关联若关联字段无索引即使加了 WHERE 也大概率触发全表扫描LEFT JOIN WHERE 子句可能悄悄变成 INNER JOIN这是最隐蔽也最常踩的坑一旦在 LEFT JOIN 后的 WHERE 中对右表字段加非空判断优化器就会剔除所有右表为 NULL 的行——等价于强制转成 INNER JOIN。错误写法SELECT * FROM orders o LEFT JOIN customers c ON o.cid c.id WHERE c.country CN → 实际丢掉所有无客户信息的订单正确写法把右表过滤条件移到 ON 子句LEFT JOIN customers c ON o.cid c.id AND c.country CN若必须保留左表全部记录且只统计某类右表数据用条件聚合更安全COUNT(CASE WHEN c.country CN THEN 1 END)GROUP BY 多维统计时别漏掉非聚合字段在标准 SQL如 PostgreSQL、SQL Server中SELECT 列表里所有非聚合字段都必须出现在 GROUP BY 中MySQL 5.7 严格模式下同理。否则要么报错 ERROR 1055要么返回不可靠的“随机值”。 Fotor AI Image Generator Fotor 平台的 AI 图片生成器