ALTER PROCEDURE [dbo].[SP_tblTest_SelectSpecificRecordsWithCTE]
@FromRow int = 1000000,
@PgSize int = 10
AS
BEGIN
;WITH RecordsRN AS
(
select ID, colValue, ROW_NUMBER() over(order by colvalue) as Num from tblTest
)
SELECT ID Value, colValue Text FROM RecordsRN WHERE Num between @FromRow AND (@[email protected])
END
đó là truy vấn tôi đang sử dụng để phân trang. sử dụng nó và bạn sẽ nhận được 10 bản ghi mong muốn trong 4-5 giây. Tôi nhận được 10 bản ghi trong 3 giây và tổng số bản ghi trong db của tôi là 10 triệu bản, không sử dụng top 10 nó sẽ chỉ mang lại 10 bản ghi mỗi lần. trong trường hợp của tôi, tôi đang duy trì kích thước trang và số hàng bắt đầu (@FromRow) trong phiên và tôi chuyển hai giá trị này vào thủ tục lưu trữ đã cho bên dưới và nhận kết quả. Ngoài ra, nếu bạn đang sử dụng SQL 2012, bạn có thể muốn sử dụng OFFSET và Tìm nạp 10 hàng tiếp theo. tìm kiếm trên google về từ khóa OFFSET và bạn sẽ thấy kết quả mong muốn của mình ở trên cùng.
cảm ơn