You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server双表查询优化:获取所有关联图片IsDefault均为0的产品

优化实现方案

方案1:GROUP BY聚合查询(推荐,逻辑简洁,扫描次数少)

这种写法仅需扫描一次ProductImage表,通过分组聚合判断分组内是否存在IsDefault=1的记录,无需嵌套子查询,可读性和性能表现都更优:

SELECT pd.ProductId
FROM Product pd
INNER JOIN ProductImage img ON pd.ProductId = img.ProductId
GROUP BY pd.ProductId
HAVING MAX(CAST(img.IsDefault AS INT)) = 0

说明:如果IsDefault本身就是INT类型,可以去掉CAST转换直接取最大值。只要分组内存在任意一张默认图,最大值就会是1,筛选等于0的结果就完全符合需求,也不需要额外加DISTINCT去重,GROUP BY天然实现了去重逻辑。

方案2:LEFT JOIN反匹配查询

这种写法等价于你原有的NOT EXISTS逻辑,大多数场景下SQL Server查询优化器会生成和NOT EXISTS完全一致的执行计划:

SELECT DISTINCT pd.ProductId
FROM Product pd
INNER JOIN ProductImage img ON pd.ProductId = img.ProductId
LEFT JOIN ProductImage defaultImg ON defaultImg.ProductId = pd.ProductId AND defaultImg.IsDefault = 1
WHERE defaultImg.ProductId IS NULL

性能优化建议

给ProductImage表建立(ProductId, IsDefault)的联合非聚集索引,上述所有查询的性能都会大幅提升,避免全表扫描。

内容的提问来源于stack exchange,提问作者Allah Ditta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:15:04