2026-05/04~10技术问题处理

2026-05/04~10技术问题处理

  • [一.LEFT JOIN 与 INNER JOIN](#一.LEFT JOIN 与 INNER JOIN)
    • [1. 原始业务场景](#1. 原始业务场景)
    • [2. 原有错误 SQL](#2. 原有错误 SQL)
    • [3. 存在问题 & 根因](#3. 存在问题 & 根因)
    • [4. 分步优化 & 每步原因](#4. 分步优化 & 每步原因)
    • [5. 最终正确 SQL](#5. 最终正确 SQL)
    • [6. 配套索引](#6. 配套索引)
    • [7. 二次拓展](#7. 二次拓展)

一.LEFT JOIN 与 INNER JOIN

1. 原始业务场景

左连接:以左表为主表,保留主表所有数据,根据连接条件匹配右表数据,匹配成功直接回显,匹配失败即为null.

内连接: 保留符合连接条件的数据。

2. 原有错误 SQL

sql 复制代码
SELECT COUNT(task.id) FROM pro_inspect_await_instance_task task LEFT JOIN pro_inspect_product_submit submit 
ON task.product_submit_id = submit.id  WHERE submit.status <= 10

3. 存在问题 & 根因

  1. 逻辑错误:LEFT JOIN 左连接后,WHERE submit.status <=10 会把 submit为NULL 的数据全部过滤,左连接变相变成内连接,等价于内连接;
  2. 计数冗余:COUNT(task.id) 主键非空,和 COUNT() 效果一致,但优化器对 COUNT() 优化更好;
  3. 无索引:关联字段、过滤字段无索引,大表全表扫描性能差。

4. 分步优化 & 每步原因

  1. 把 submit 过滤条件从 WHERE 移到 JOIN 的 ON 后面
    原因:ON 后过滤只过滤关联匹配的数据,不会删掉主表 task 不匹配的数据,保留左连接语义;
  2. COUNT(task.id) 改为 COUNT(*)
    原因:主键非空,语义等价,数据库优化器处理更高效;
  3. 给关联字段、状态字段建立联合索引
    原因:避免全表扫描,走索引快速过滤 + 关联。

5. 最终正确 SQL

sql 复制代码
-- 保留主表所有数据,仅关联内过滤状态
SELECT COUNT(*) FROM pro_inspect_await_instance_task task LEFT JOIN pro_inspect_product_submit submit 
ON task.product_submit_id = submit.id  AND submit.status <= 10; -- 条件放ON里

6. 配套索引

sql 复制代码
CREATE INDEX idx_submit_status_id ON pro_inspect_product_submit(status, id);
CREATE INDEX idx_task_submit_id ON pro_inspect_await_instance_task(product_submit_id);

7. 二次拓展

若业务本来就只需要两表都匹配数据,直接改用 INNER JOIN 更直观;大表可改用 EXISTS 半连接优化。

相关推荐
小陈phd几秒前
Text2SQL智能体学习笔记(二)——NL2SQL落地的隐形基石:元数据库
数据库·笔记·学习
lulu1216544078几秒前
大模型API聚合平台技术架构深度对比:六大平台协议转换、路由调度与安全治理全解析 - 微元算力(weytoken)
java·人工智能·安全·架构·ai编程
霸道流氓气质1 分钟前
阿里云 OSS 从零到实战:概念、配置与 Spring Boot 集成指南
数据库·spring boot·阿里云
茉莉玫瑰花茶2 分钟前
综合案例 - AI 智能租房助手 [ 4 ]
数据库·python·ai·langgraph
可乐ea3 分钟前
【Spring Boot + MyBatis|第4篇】MyBatis 动态 SQL:if、where、foreach 使用详解
java·spring boot·后端·sql·mybatis
ULIi096kr4 分钟前
MySQL查看表创建时间、修改时间、最后更新时间(精准排查僵尸表)
数据库·mysql
記億揺晃着的那天10 分钟前
Windows 通过 Java 获取可用端口的一个坑:Hyper-V 保留端口导致 UDP 绑定失败
java·windows·udp
组合缺一11 分钟前
SolonCode(编码智能体)支持鸿蒙 PC
java·华为·ai·ai编程·harmonyos·solon·soloncode
小bo波13 分钟前
用匿名内部类优雅地计算方法执行时间
java·设计模式·性能测试·模板方法模式·lambda·代码优化·匿名内部类
折哥的程序人生 · 物流技术专研17 分钟前
Tomcat 严重警告:JDBC 驱动未注销 + 工作线程泄漏 —— 原因、影响与彻底修复(生产级终极指南)
java·运维·数据库·mysql·oracle·tomcat