数据过多时候,子查询改成left join减少笛卡尔积
子查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | SELECT cn.portal_id AS portalId, count ( id ) AS num FROM construction_package_wbs_node cn WHERE cn.delete_flag = 0 AND ( cn.node_type = '单位工程' OR cn.node_type = '分部工程' OR cn.node_type = '分项工程' OR cn.node_type = '单元工程' OR cn.node_type = '子检验批' OR cn.node_type = '检验批' ) AND id NOT IN ( SELECT ref_parent_id FROM construction_package_wbs_node WHERE delete_flag = 0 AND node_type = '子检验批' ) GROUP BY cn.portal_id |
当construction_package_wbs_node 这张表数据条数如果多大,笛卡尔积就会更大,所以查询非常慢可能存在运行不出来,改成如下方式就会非常快,并且不止查一种门户的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | SELECT cn.portal_id AS portalId, count ( id ) AS num FROM construction_package_wbs_node cn LEFT JOIN ( SELECT ref_parent_id, portal_id FROM construction_package_wbs_node WHERE delete_flag = 0 AND node_type = '子检验批' GROUP BY portal_id, ref_parent_id ) sq ON cn.id = sq.ref_parent_id AND cn.portal_id = sq.portal_id WHERE cn.delete_flag = 0 AND ( cn.node_type = '单位工程' OR cn.node_type = '分部工程' OR cn.node_type = '分项工程' OR cn.node_type = '单元工程' OR cn.node_type = '子检验批' OR cn.node_type = '检验批' ) AND sq.ref_parent_id IS NULL GROUP BY cn.portal_id |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~