如何解决硬编码值时查询是即时的,否则不会完成
我有一个查询,当在 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,查询会立即完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。