应只SELECT必要字段、WHERE条件勿误放ON中、用覆盖索引避免回表、小表驱动大表且驱动表需有索引。SELECT 中只写真正需要的字段别用 *用 * 看起来省事但数据库得把整行所有字段从磁盘读出来、经过网络传给客户端、再被应用层丢弃掉——这些字段哪怕你压根没用也全程参与了 I/O、内存、网络开销。尤其当表里有 TEXT、JSON、BLOB 或宽字段比如 50 列时性能下降会非常明显。实操建议JOIN 前先列清楚业务逻辑真正要什么是只需要 user.id 和 order.total那就只 SELECT 这两个如果用 ORM确认它生成的 SQL 没偷偷加 * 或冗余字段比如 Django 的 .values() / .only() 要显式指定对宽表 JOIN宁可多写几遍字段名也别依赖 SELECT * —— 后续加字段时* 会无声无息拖慢查询WHERE 条件写在 JOIN 后别错放到 ON 里过滤主表ON 是定义关联逻辑的WHERE 才是最终筛选结果的。把本该在 WHERE 的条件比如 user.status active误塞进 ON会导致 LEFT JOIN 变成隐式 INNER JOIN或漏掉本该保留的左表记录——这不是字段多不多的问题是逻辑错误。常见错误现象LEFT JOIN users u ON u.id o.user_id AND u.status active → 如果用户 status 不是 active这条 user 记录就“消失”了哪怕你只想查订单也拿不到对应用户信息正确做法是LEFT JOIN users u ON u.id o.user_id WHERE u.status active注意这会让 LEFT JOIN 失效等价于 INNER若真要保留左表空值WHERE 应写成 WHERE (u.status active OR u.status IS NULL)用覆盖索引避免回表让 SELECT 字段全落在索引里如果 SELECT 的字段都能被某个索引“覆盖”MySQL/PostgreSQL 就不用回主键索引捞数据——直接从二级索引里读完走人。这对 JOIN 尤其关键每多一次回表就是多一次随机 I/O。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。