亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實現分頁的有效方法

實現分頁的有效方法

胡說叔叔 2019-08-30 14:42:36
我應該使用LINQ Skip()和Take()方法進行分頁,還是使用SQL查詢實現自己的分頁?哪個最有效?為什么我會選擇一個而不是另一個?我正在使用SQL Server 2008,ASP.NET MVC和LINQ。
查看完整描述

3 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

嘗試使用


FROM [TableX]

ORDER BY [FieldX]

OFFSET 500 ROWS

FETCH NEXT 100 ROWS ONLY

在SQL服務器中獲取501到600的行,而不將它們加載到內存中。請注意,此語法僅適用于SQL Server 2012


查看完整回答
反對 回復 2019-08-30
?
MMMHUHU

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應用程序中延遲加載更多數據時實現分頁的最佳方法。


注意,“搜索方法”也稱為鍵集尋呼。


查看完整回答
反對 回復 2019-08-30
  • 3 回答
  • 0 關注
  • 507 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號