tsql - 硬编码值时查询是即时的,否则不会完成
问题描述
当在 WHERE 子句中硬编码一个值时,我有一个即时查询,但是当使用连接表中的值时,查询永远不会完成。
我不知道为什么,因为查询没有完成,我什至无法查看执行计划。我的意思是,当它必须查看表的记录而不是硬编码的值时,它会花费更长的时间,但不会更长。
我有这个临时表设置:
#MY_TEMP_TABLE -- PRIMARY KEY (district_id asc, school_id asc, class_id asc)
school_id | class_id | end_dte (int) | district_id
--------------------------------------------------
1 | 5 | 20201223 | ABC
HISTORY TABLE -- PRIMARY KEY (end_dte asc, class_id asc, school_id asc)
school_id | class_id | end_dte (int)
------------------------------------
CLASS TABLE -- PRIMARY KEY (class_id asc, school_id asc)
school_id | class_id | district_id
----------------------------------
这是查询:
SELECT HT.school_id, HT.class_id, MAX(HT.end_dte)
FROM HISTORY_TABLE HT
INNER JOIN CLASS C ON HT.school_id = C.school_id AND HT.class_id = C.class_id
INNER JOIN #MY_TEMP_TABLE MTT ON C.school_id = MTT.school_id AND C.class_id =
MTT.class_id AND C.district_id = MTT.district_id
WHERE C.district_id = 'ABC'
AND HT.end_dte <= MTT.end_dte
GROUP BY HT.school_id, HT.class_id
我现在在 #MY_TEMP_TABLE 中有 1 条记录,而 HISTORY_TABLE 有数百万不同的 school_id 和 class_id 值。
如果我在 WHERE 子句中硬编码一个特定值来代替 MTT.end_dte,则查询会立即完成。
解决方案
推荐阅读
- javascript - 禁用的输入在 Firefox 中工作错误
- ios - 使用“https”作为深度链接swift 4中的url模式在应用程序委托中未调用打开url方法
- powershell - 函数中可选但互斥的开关
- marklogic - ADMIN-DUPLICATECONFIGITEM:数据库资源“hrhub-content”已经内容数据库“element-attribute-range-index
- ddos - 在 DDOS 攻击后,我无法再访问我的网站了
- javascript - Javascript:promise.resolve() 语句有效吗?
- machine-learning - ANN 结果是否应该根据输出而改变?
- python - 使用 python 脚本获取证书大小
- mysql - 如何使用 dbfit 访问多个数据集?
- asp.net-core - 如何在 ASP.NET Boilerplate (ASP.NET Core) 中更改应用服务的响应格式?