3 回答

TA貢獻1851條經驗 獲得超4個贊
嘗試使用
FROM [TableX]
ORDER BY [FieldX]
OFFSET 500 ROWS
FETCH NEXT 100 ROWS ONLY
在SQL服務器中獲取501到600的行,而不將它們加載到內存中。請注意,此語法僅適用于SQL Server 2012

TA貢獻1834條經驗 獲得超8個贊
然LINQ-to-SQL將生成一個OFFSET子句(可能使用ROW_NUMBER() OVER() 其他人提到的模擬),但在SQL中執行分頁的方式卻完全不同,更快。這通常被稱為“搜索方法”,如本博客文章中所述。
SELECT TOP 10 first_name, last_name, score
FROM players
WHERE (score < @previousScore)
OR (score = @previousScore AND player_id < @previousPlayerId)
ORDER BY score DESC, player_id DESC
該@previousScore和@previousPlayerId值是來自前一頁的最后一條記錄的相應值。這允許您獲取“下一頁”。如果ORDER BY方向是ASC,只需使用>。
使用上述方法,您無法在未先讀取前40條記錄的情況下立即跳轉到第4頁。但通常情況下,你不想跳得那么遠。相反,您可以獲得更快的查詢,該查詢可能能夠在固定時間內獲取數據,具體取決于您的索引。此外,無論基礎數據是否發生變化,您的頁面都將保持“穩定”狀態(例如,在第4頁上,當您在第4頁時)。
例如,這是在Web應用程序中延遲加載更多數據時實現分頁的最佳方法。
注意,“搜索方法”也稱為鍵集尋呼。
添加回答
舉報