3 回答

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

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
然LINQ-to-SQL將生成一個(gè)OFFSET子句(可能使用ROW_NUMBER() OVER() 其他人提到的模擬),但在SQL中執(zhí)行分頁(yè)的方式卻完全不同,更快。這通常被稱為“搜索方法”,如本博客文章中所述。
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值是來自前一頁(yè)的最后一條記錄的相應(yīng)值。這允許您獲取“下一頁(yè)”。如果ORDER BY方向是ASC,只需使用>。
使用上述方法,您無法在未先讀取前40條記錄的情況下立即跳轉(zhuǎn)到第4頁(yè)。但通常情況下,你不想跳得那么遠(yuǎn)。相反,您可以獲得更快的查詢,該查詢可能能夠在固定時(shí)間內(nèi)獲取數(shù)據(jù),具體取決于您的索引。此外,無論基礎(chǔ)數(shù)據(jù)是否發(fā)生變化,您的頁(yè)面都將保持“穩(wěn)定”狀態(tài)(例如,在第4頁(yè)上,當(dāng)您在第4頁(yè)時(shí))。
例如,這是在Web應(yīng)用程序中延遲加載更多數(shù)據(jù)時(shí)實(shí)現(xiàn)分頁(yè)的最佳方法。
注意,“搜索方法”也稱為鍵集尋呼。
添加回答
舉報(bào)