我有一个查询,它占用我的SQL 2008 DB 1.4秒。然后我尝试使用这个模板做一个子查询:
;with __myResults as (
... my initial query ... already has a column:
row_number() over (ORDER BY ...) as RowNum
)
select * from __myResults where RowNum between X and Y
如果我将X和Y设置为较低的数字,则表现良好。大约需要0.3秒。 如果我将X和Y设置为高数字,它的性能甚至比初始查询更差。如果我增加X和Y,它会在运行时不断增加。
这怎么可能?
我尝试做的是比较执行计划,但它们是相同的(只需查看"成本:n%")
我该如何调试?我在哪里可以看到问题所在?
我也尝试了以下内容:
where RowNum > highNumber
很快!而
where RowNum > highNumber and RowNum < highNumber + 10
很慢。最后:
where RowNum < highNumber
很慢(6秒)。
更新
我最终将结果放在临时表中。然后进行过滤。这似乎很快。
答案 0 :(得分:0)
为什么不使用FETCH
/ OFFSET
?
select *
from __myResults
order by ??
offset X - 1
fetch next (X - Y) rows only;
您需要调整参数X
和Y
。