2013-02-21 68 views
0

問題描述:在Oracle表中我有3000000條記錄。用戶希望在瀏覽器中將此表視爲一個帶有分頁(每頁100條記錄)的表(jQuery數據表)。當我設計它時,大約有30000個頁面。當用戶單擊單頁時,我正在查詢具有排序的表返回那麼多行。這裏的問題是每個頁面加載需要大約20秒的時間。需要關於設計表分頁的建議

有沒有人可以建議我「如何處理這種情況?所以用戶不會覺得從他身邊慢。在這些許多記錄的服務器端緩存是一個很好的選擇或不?

查詢類似於:

SELECT /*+ ALL_ROWS */ * FROM 
(SELECT ROWNUM SNO , A.* FROM 
(SELECT /*+ PARALLEL(ABCTABLE 4)*/ COUNT(*) OVER () CNT, 
      columnA, columnb,columnc 
      FROM ABCTABLE) 
     order by columnA, columnb,columnc) a) 
     where sno between ? and ?; 

?和? : - 頁面範圍1到30/30到60/.....

回答

1

我仍然懷疑你的GUI用戶會看到所有的3000000記錄。肯定他對1000條記錄(10頁)的最新行(過濾器)感興趣,所以你最好先將1000條記錄傳遞給客戶端,讓客戶端在每個頁面上顯示100條記錄直到10頁。之後,您可以爲下一個1000條記錄ping服務器。

如果延遲是在ORACLE抓取中,請考慮索引您的表以減少查詢時間。 http://www.codeproject.com/Articles/39006/Overview-of-SQL-Server-2005-2008-Table-Indexing-Pa

還仔細檢查explain plan

+0

@sugumar,從3000000過濾1000條記錄也需要時間。用戶希望以毫秒爲單位查看頁面。 – 2013-02-21 05:33:10

+1

您是否至少直接在Oracle中運行查詢以查看該部分需要多長時間? – 2013-02-21 05:49:37

+0

+1是的,我同意ElectricLlama;首先檢查你的數據庫如何響應? – 2013-02-21 05:54:59

1

爲了提高性能,您首先需要找到瓶頸。這可能是許多事情:

  1. 查詢返回緩緩由於壞的查詢計劃/缺少索引等
  2. 將數據返回緩緩由於緩慢的網絡
  3. 數據在慢慢呈現的您的應用程序

沒人想瀏覽300萬條記錄。人們正在尋找一些東西。如果您添加一些合理的搜索/過濾標準和索引,您將獲得更多可用的應用程序。

+0

我正在使用索引。查詢還具有Oracle Query優化提示,如/ * + PARALLEL( 4),/ * + PARTITION等。 – 2013-02-22 05:45:11

1

大部分屏幕限制只顯示30條記錄。

想法是向用戶顯示30條記錄,因爲用戶不能在孔屏幕中看到30000條記錄,他必須向下滾動以查看其餘記錄。

當他向下滾動時,嘗試獲取下一個30條記錄,直到您達到每頁30000條記錄。

您可以在Sql查詢中使用限制來限制記錄的數量而不是獲取所有記錄,這會減少頁面加載時間。

具有像這樣的基數限制1至30000,30001至60000等每頁。

然後在每個滾動具有1至30

sql_limit的SQL極限= base_limit + 30

如果用戶向下滾動到第30記錄的端然後提取新30個記錄

sql_limit + 30

繼續這個過程,直到你到達頁數限制其30000

直到sql_limit> = page_limit

如果sql_limit超過page_limit,則跳轉到新頁面並對每個頁面重新執行相同的過程。