2010-06-24 35 views
4

我對使用ASP.NET和SQL Server分頁大數據集(100,000條記錄)的最佳實踐感興趣。分頁大數據集 - SQL Server(最佳實踐)

我已經使用SQL服務器來執行分頁之前,雖然這似乎是一個理想的解決方案,但問題出現在這個解決方案的動態排序中(order by子句的case語句確定ASC的列和case語句/ DESC命令)。我不是這樣的粉絲,因爲它不僅將應用程序與SQL細節綁定在一起,而且是可維護性的噩夢。

打開其他解決方案...

謝謝大家。

+0

你是什麼意思,它將應用程序綁定到SQL細節? – 2010-06-24 14:55:15

+0

您現在有一個跨越數據庫和應用程序的索引方案,例如與您的存儲過程中的case語句值匹配的.NET枚舉,或者可能是所請求列的字符串表示形式。 – cweston 2010-06-24 14:59:41

回答

0

如果使用Order by技術,每次瀏覽時都會導致服務器上的負載相同,因爲您運行查詢,然後過濾數據。

當我有奢侈的非連接池環境時,我創建並保持連接打開,直到分頁完成。在連接上創建一個#Temp表,只需要返回的行的ID,並將IDENTITY字段添加到此行集。然後使用此表進行分頁以獲得最快的回報。

如果您僅限於連接池環境,則一旦連接關閉,#Temp表就會丟失。在這種情況下,您將不得不緩存服務器上的ID列表 - 永遠不要將它們發送到客戶端以進行緩存。

0

我想給Raj的答案增加一個快速建議。如果使用##表格格式創建臨時表格,它將會存活。但是,它也將在所有連接中共享。

如果您在將要排序的列上創建索引,則此方法的成本要低得多。

埃裏克

1

以我的經驗,100 000多個記錄是看着他們的用戶太多記錄。上次我做了這個,我提供了過濾器。因此,用戶可以使用它們並查看已過濾(更少數量)的記錄並對它們進行排序,因此,分頁和排序變得更快(比在整個100000條記錄上進行分頁/排序)要快得多。如果用戶沒有使用過濾器,我會顯示一個「警告」,表示會返回大量記錄,並且會有延遲。在Erick建議的列上添加一個索引也肯定會有所幫助。