如何解决sql查询中的性能问题?
所有开发人员都知道,IN和DISTINCT为所有sql查询创建问题。我的同事创建了下面的查询,但现在他不在我的雇佣公司工作。请查看下面的代码。如何调整查询以获得高性能如何解决sql查询中的性能问题?,sql,sql-server,tsql,Sql,Sql Server,Tsql,所有开发人员都知道,IN和DISTINCT为所有sql查询创建问题。我的同事创建了下面的查询,但现在他不在我的雇佣公司工作。请查看下面的代码。如何调整查询以获得高性能 SELECT xxx , COUNT(DISTINCT Id) Count FROM Test (NOLOCK) WHERE IsDeleted = 0 AND xxx IN ( SELECT CAST(value AS INT)
SELECT xxx
, COUNT(DISTINCT Id) Count
FROM Test (NOLOCK)
WHERE IsDeleted = 0
AND xxx IN
(
SELECT CAST(value AS INT)
FROM STRING_SPLIT(@ProductIds, ',')
)
GROUP BY xxx
所有开发人员都知道,IN和DISTINCT为所有sql查询创建问题
这不一定是真的。它们确实会影响性能,但有时是必要的
这可能没什么大不了的。它会被评估一次。如果您有另一种方法来传递列表,比如使用临时表,那就更好了
CountID可疑。我希望id已经是唯一的了。如果是这样,那么只需使用COUNT*
除非您真的知道自己在做什么,否则不建议使用NOLOCK。处理可能不一致的数据是危险的。我使用Sentry One Plan Explorer来帮助找到我遇到性能问题的查询的调整点: 首先,您需要确定在您的环境中有什么好的性能,然后找到查询中最差的部分并首先对其进行优化
最后,考虑如何存储数据,查找有必要添加索引的位置。 最好是为XXX列创建索引
所有开发人员都知道,对于所有添加的sql查询,在和DISTINCT create问题中,这是一个相当宽泛的语句。你的问题也是如此。也许从查看查询计划开始吧?所有开发人员都知道,在所有sql查询的不同创建问题中,该语句是错误的;您刚刚发现一位开发人员不同意该语句。可能您的查询速度慢的原因是IsDeleted或xxx未包含在索引中,因此数据引擎必须扫描整个表。是时候查看执行计划了。请发布架构和示例数据,并进行解释。否则,我们只是猜测。。。