2011-01-06 46 views
0

如果我有一個包含大量信息的查詢(類似於幾個視圖,每個視圖都碰到幾個表,並且有許多表具有成千上萬行),我只需要從中獲取10條記錄即可顯示對於用戶來說,在支持SQL Server 2000的同時檢索這些記錄的最佳方式是性能優勢?一旦我可以使用SQL Server 2005,ROW_NUMBER看起來像是一個明顯的選擇(糾正我,如果我錯了),但在2000年該怎麼辦?在SQL Server 2000中分頁大量數據的最有效方法是什麼?

回答

0

Greg Hamilton has an article它使用SET ROWCOUNTSELECT變成一個變量,以避免引用不需要的行,並帶有一些非常引人注目的性能結果。但是,MSDN says

如果在選擇列表中引用了一個變量,則應該爲它分配一個標量值,否則SELECT語句應只返回一行。

但隨後接着說

注意,如果在作業中引用的效果纔可見。

如果SELECT語句返回多行並且變量引用非標量表達式,則該變量將設置爲結果集最後一行中爲表達式返回的值。

表明它是在這種情況下真的好嗎(右?)

格雷格結束了與此:

CREATE PROCEDURE [dbo].[usp_PageResults_NAI] 
(
    @startRowIndex int, 
    @maximumRows int 
) 
AS 

DECLARE @first_id int, @startRow int 

-- A check can be added to make sure @startRowIndex isn't > count(1) 
-- from employees before doing any actual work unless it is guaranteed 
-- the caller won't do that 

-- Get the first employeeID for our page of records 
SET ROWCOUNT @startRowIndex 
SELECT @first_id = employeeID FROM employees ORDER BY employeeid 

-- Now, set the row count to MaximumRows and get 
-- all records >= @first_id 
SET ROWCOUNT @maximumRows 

SELECT e.*, d.name as DepartmentName 
FROM employees e 
    INNER JOIN Departments D ON 
     e.DepartmentID = d.DepartmentID 
WHERE employeeid >= @first_id 
ORDER BY e.EmployeeID 

SET ROWCOUNT 0 

GO 

此方法假定你有一個唯一的ID通過命令,我不認爲你可以按照原樣使用這種方法,比如說,對一個非唯一的DateTime列進行排序。

相關問題