2010-09-23 76 views
0

我有一个具有分页功能的查询,并且我正在使用ROW_NUMBER()函数。我的rownumber函数中的order by子句是动态的,并且在调用sp时会一直进行更改。它适用于少数列,但对于日期时间数据类型的一列,它需要很多时间。令人惊讶的事情是,当我按降序排列相同的列,查询运行在一秒,但升序需要很多时间:(RowNumber函数中的Order By子句减慢查询的性能

我试着创建一个非聚集索引(因为我已经有一个聚簇对datetime列的索引表上的),但它并没有帮助我。

可否请你建议我可以做什么来提高性能。

感谢,

Deepti

+0

没有看到查询和知道什么数据库(尽管ROW_NUMBER被少数数据库 - Oracle9i +,SQL Server 2005+,PostgreSQL 8.4 + ...支持,但不支持MySQL),我们可以做的不多。 – 2010-09-23 17:19:13

回答

1

假设这是SQL S erver 2005(我没有检查过2008),ROW_NUMBER()函数因SQL优化器中的敏感问题而臭名昭着。谷歌先生将向您展示大量的例子,如排序方向等相对较小的变化导致优化器创建一个非常不同的执行计划。

最好的办法是检查缓存的执行计划看差异:

SELECT sc.* 
FROM master.dbo.syscacheobjects AS sc 
WHERE sc.cacheobjtype = 'Executable Plan' 

或者你可以改变你的方法和适应something nifty like this

+0

据称在SQL Server 2008中更好... – gbn 2010-09-23 19:34:10