如何解决SQL查询中的性能问题?

时间:2019-06-11 11:36:04

标签: 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)
            FROM    STRING_SPLIT(@ProductIds, ',')
        )
GROUP BY xxx

3 个答案:

答案 0 :(得分:2)

  

所有开发人员都知道,“ IN”和DISTINCT会为所有sql查询创建问题。

这不一定是正确的。它们确实会影响性能,但有时它们是必需的。

IN可能没什么大不了的。它被评估一次。如果您还有另一种传递列表的方法(例如使用临时表),那会更好。

COUNT(DISTINCT id)可疑。我希望id已经是唯一的。如果是这样,则只需使用COUNT(*)

除非您真的知道自己在做什么,否则不建议使用WITH (NOLOCK)。处理可能不一致的数据很危险。

答案 1 :(得分:1)

我使用过Sentry One Plan Explorer来帮助查找我遇到性能问题的查询的调整点:  https://www.sentryone.com/plan-explorer

首先,您需要确定环境中的良好性能,然后查找查询中最糟糕的部分并对其进行优化。

最后,考虑一下如何存储数据,寻找必要时添加索引的地方。

答案 2 :(得分:1)

  1. 更好地为XXX列创建索引