程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> TOPN 子句與SET ROWCOUNTN 對比

TOPN 子句與SET ROWCOUNTN 對比

編輯:關於SqlServer

問:為了從查詢中返回指定數量的行,使用 TOPN 子句比使用SET ROWCOUNTN 語句要快嗎?

答:在正確進行了索引的情況下,TOP N 子句和SET ROWCOUNT N 語句是一樣快的,但是如果數據未經過排序,TOP N 要快一些。在輸入未排序的情況下,TOP N 操作時使用一個經過排序的小的中間臨時表,而且操作時僅僅替換該表的最後一行。如果輸入是近似排序的,TOP N 引擎必須刪除或插入最後行,但只需幾次操作即可。近似排序意味著您正在處理的堆集在初始構建時可進行有序的插入操作,並且不需要進行很多的更新、刪除、向前移動指針等操作。

排序一個近似排序的堆集比排序一個巨大的表要更有效率。在一次測試中,使用TOP N 來對一個由無序插入操作構建的並且含有同樣的行數的表進行排序,發現TOP N 的效率也不高。通常,在進行過索引和未進行過索引的情況下,I/O時間都是一樣的;但是如果沒有進行過索引,SQL Server 必須要進行一次全表掃描。處理器時間和實耗時間說明近似排序的堆集要更有效率一些。但I/O時間是相同的,因為不管怎樣SQL Server都要讀取所有的行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved