2010-09-23 95 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