sql - 如何解决 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
解决方案
所有开发人员都知道“IN”和 DISTINCT 会为所有 sql 查询创建问题。
这不一定是真的。它们确实会损害性能,但有时它们是必要的。
这IN
可能没什么大不了的。它被评估一次。如果你有另一种方式来传递一个列表——比如使用一个临时表——那就更好了。
COUNT(DISTINCT id)
是可疑的。我希望id
已经是独一无二的。如果是这样,那么只需使用COUNT(*)
.
WITH (NOLOCK)
除非您真的知道自己在做什么,否则不建议这样做。处理可能不一致的数据是危险的。
推荐阅读
- css - 导航栏未显示在网站的第二页上
- c++ - 为什么 `wifstream` 上的 `getline` 从 UTF-16 编码文件中读取乱码输入?
- windows - 如何让 Windows 让我安装未签名的应用程序?
- php - 正则表达式仅保留字符串中的最后一个点
- python-3.x - wxpython 不能选择好的面板进行缩放
- solr - Solr 6.6.1 Java 支持
- python - 返回 csv 文件作为响应,其中仅包含标题
- c# - 如何最好地使用 UWP FullTrustProcessLauncher 启动单独的 Unity 游戏
- c++ - C++ 使用构造函数参数初始化成员数组
- bash - 如何组合文件的内容并将文件名附加到输出文件中?