簡體   English   中英

如何使用WCF和SQL Server實現行分頁?

[英]How to implement paging of rows with WCF and SQL Server?

首先,我是WCF和SQL Server的新手。 我正在開發一個與WCF和SQL Server 2012連接的應用程序。我有一個表,其中的行具有一百萬條記錄,並且該計數將不斷增加。 當客戶端發送請求時,如果用戶請求,我將獲取30行,然后顯示接下來的30行,依此類推。 我的要求是在WCF或SQL中進行分頁。 我有以下問題:

  1. 我想知道在WCF或SQL Server中應該在哪里實現分頁概念? 哪種方法最快?
  2. 如果我在WCF中實現它,我將使用LINQ的Skip and Take運算符來獲取請求的頁面。 那是正確的方法嗎?
  3. 如果使用SQL,哪種方法將獲取最快的結果OFFSET (或) ROW_NUMBER() OVER選項?

由於我是新手,所以這些方法才是我所知道的。 還有其他我不知道的方法嗎?

  1. 您想在SQL Server上進行分頁,如果您執行的每個查詢都不會返回必須加載到內存中的一百萬行,那么您將立即丟棄其中的30條記錄。 效率很低。
  2. 這取決於你的意思。 如果您正在使用諸如“實體框架”之類的“ SkipTake則不會在內存中執行這些操作,而是會將其轉換為sql查詢並在sql中運行。
  3. 如果您可以使用,則OFFSET將為您提供比ROW_NUMBER() OVER更好的性能。

需要注意的一件事是,如果要進行分頁,則必須確保順序是確定的。 訂購中不能有領帶,如果允許領帶,則可以在分頁符上保留一個權利。 假設通過您的訂單“綁定”了A行和B行:

  • 您對第1頁運行查詢,並且行A被視為在行B和行A顯示為該頁面的最后一項之前
  • 您對第2頁運行查詢,並且認為行B在行A和行A顯示為第二頁的第一項之前。

在上面的示例中,您從未顯示B行。 解決此問題的最簡單方法是始終確保您在最后一件事上對主鍵(或您可以在其上進行唯一索引的任何其他列集)進行排序,以確保您之間沒有任何聯系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM