首页 > 解决方案 > 如何解决 sql 查询中的性能问题?

问题描述

所有开发人员都知道“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

标签: sqlsql-servertsql

解决方案


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

这不一定是真的。它们确实会损害性能,但有时它们是必要的。

IN可能没什么大不了的。它被评估一次。如果你有另一种方式来传递一个列表——比如使用一个临时表——那就更好了。

COUNT(DISTINCT id)是可疑的。我希望id已经是独一无二的。如果是这样,那么只需使用COUNT(*).

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


推荐阅读