sql-server - 如何优化此 SQL Server 查询
问题描述
我有以下查询,它按预期工作,但执行大约需要 3 秒。原因是大量记录。有人可以建议任何步骤以提高性能吗?
解释 :
- 使用 Comp id 和
Default_Comp = 1
- 如果未找到,则忽略
Default_Comp
并仅根据 Comp id 检查 - 还是没有找到,忽略与表2的join,尝试通过Comp id获取。
我的代码:
DECLARE @Finished_Comp VARCHAR(MAX) = NULL;
SELECT @Finished_Comp = MIN(tbl2.Finished_Comp)
FROM Table1 tbl1
INNER JOIN Table2 tbl2 ON tbl1.Sav_ID = tbl2.Sav_ID
WHERE Comp_ID = @Comp_ID AND tbl1.Default_Comp = 1
IF @Finished_Comp IS NULL
BEGIN
SELECT @Finished_Comp = MIN(tbl2.Finished_Comp)
FROM Table1 tbl1
INNER JOIN Table2 tbl2 ON tbl1.Sav_ID = tbl2.Sav_ID
WHERE Comp_ID = @Comp_ID
END
IF @Finished_Comp IS NULL
BEGIN
SELECT @Finished_Comp = MIN(Finished_Comp)
FROM Table1 tbl1
WHERE Comp_ID = @Comp_ID AND @Finished_Comp != ''
END
我尝试使用COALESCE
,但它返回错误的结果Finished_Comp
解决方案
你在评论里说
我坚信可以在一定程度上更改查询,这样就不需要执行多个查询。
你是对的。
SELECT @Finished_Comp = COALESCE(MIN(CASE WHEN tbl1.Default_Comp = 1 THEN tbl2.Finished_Comp END),
MIN(tbl2.Finished_Comp),
MIN(CASE WHEN tbl1.Finished_Comp <> '' THEN tbl1.Finished_Comp END))
FROM Table1 tbl1
LEFT JOIN Table2 tbl2
ON tbl1.Sav_ID = tbl2.Sav_ID
WHERE tbl1.Comp_ID = @Comp_IDV
但充其量这只会将执行时间减少到当前的三分之一(对于需要执行所有三个查询的情况)。
您应该考虑在
- 表格1 -
Comp_ID, Sav_ID INCLUDE (Default_Comp, Finished_Comp)
- 表 2 -
Sav_ID INCLUDE (Finished_Comp)
对于可能更大的改进。
推荐阅读
- git - 尽管显示了诸如“Initialized empty Git repository in ~”之类的消息,但无法通过“git init”创建存储库
- curl - 像 POSTMAN 一样设置 cURL
- swift - 哪里误用了一个类型?
- python - 如果在 2 个列表中满足条件,python 在循环中跳过下一个索引
- javascript - Access-Control-Allow-Origin 在 React 应用程序中不起作用
- django - 在月过滤器中找不到我的数据库中的对象
- c# - 即使 2 种颜色完全相同,我的脚本也没有运行
- python-3.x - 3D矩阵加法python
- c++ - ESP32:使用 IRAM_ATTR 时编译错误
- ruby-on-rails - - Rails & cron & 每当/几分钟的延迟,当服务器负载很重时