我有一个具有分页功能的查询,我正在使用ROW_NUMBER()函数。我的rownumber函数中的order by子句是动态的,并且在调用sp时始终会更改。它适用于少数列但对于一个具有datetime数据类型的列,它需要很多时间。令人惊讶的是,当我按降序排列同一列时,查询会在一秒内运行,但升序会花费大量时间:(。
我尝试在该日期时间列上创建一个非聚集索引(因为我已经在该表上有一个聚簇索引),但它对我没有帮助。
请您建议我可以采取哪些措施来改善表现。
谢谢,
Deepti
答案 0 :(得分:1)
假设这是SQL Server 2005(我没有检查过2008),ROW_NUMBER()函数因引起SQL优化器中的敏感性问题而臭名昭着。谷歌先生将向您展示大量示例,其中排序方向等相对较小的变化会导致优化者创建一个非常不同的执行计划。
您最好的选择是检查缓存的执行计划以查看差异:
SELECT sc.*
FROM master.dbo.syscacheobjects AS sc
WHERE sc.cacheobjtype = 'Executable Plan'
或者,您可以更改方法并调整something nifty like this。