我在查询中使用 CTE 时遇到性能问题。
这些查询很大,但它们之间的唯一区别是IN
子句中侦听的 ID 数。
第一个在子句中包含 2000 个 ID,第二个IN
子句中仅包含 1000 个 ID。
第一个的执行时间约为 33 秒,第二个 - 500 毫秒。
我也尝试增加/减少 ID 的数量,但无法找到性能下降的关键数字。
3000 个 ID - 36 个
4000 个 ID - 39 个
所以它不会增长,1000 到 2000 个 ID 之间的某个地方是关键点,但原因是什么?
对他们的分析:
第一个(慢一个(
https://gist.github.com/DonKeyHot1/7251adab3ca589c55ebead2ba75fbcf1
第二(快一(
https://gist.github.com/DonKeyHot1/48d85eaeeb84316bb43adf50114914d3
(它们太大,无法在此处发布(
这太长了,无法发表评论。
不要使用 CTE,而是将 id 放入临时表中,表中的id
作为主键:
create table temp_ids (
id int primary key
);
这应该有助于优化程序生成良好的执行计划。