2012-01-30 72 views
-3

我有一個龐大的數據庫,它有2900萬行,並且會隨着時間的推移而增長。數據庫體系結構非常簡單,它包含3列(id,name,datavalue)。由於表格非常簡單,我可以選擇將此數據庫移動到不同的數據庫,如MS Sql或Oracle。我遇到的問題是在瀏覽網頁11,000頁時需要很長時間才能加載頁面。我想知道是否有另一種分頁方式或其他產品能更好地工作。哪個數據庫可以處理通過數百萬行進行分頁

我正在使用Mysql中的Limit功能來進行分頁。

+3

你最近怎麼做你的分頁?裝載2900萬行並丟棄所有的數據,但不管你使用的是什麼數據庫,你顯示的10個數據都會變慢。 – 2012-01-30 17:47:53

+3

既然你沒有解釋你是如何分頁的,我們怎麼才能知道「另一種方式」是什麼? – RedFilter 2012-01-30 17:48:45

+0

這聽起來像是一種EAV情況,這意味着您正在進行大量的聯接,這在很多系統中也相對較慢 - 每個系統都會加入成本資源。所有主要的RDBMS都有標準的數據類型,並且幾乎可以運行相同的創建腳本(一些注意事項) - 您的「簡單」結構在這方面沒有幫助。 – 2012-01-30 17:51:29

回答

2

您提到您正在使用LIMIT子句,您是否將此子句與OFFSET子句相結合?分頁應該在應用層進行處理,並應該是這個樣子:

# Page 1 showing 20 results 
SELECT * FROM `your_table` LIMIT 20; 

# Page 2 showing 20 results 
SELECT * FROM `your_table` LIMIT 20 OFFSET 20; 

# Page 3 showing 20 results 
SELECT * FROM `your_table` LIMIT 20 OFFSET 40; 

- 編輯 -

午餐時我想你的問題,我已經在那裏我們類似的項目工作面臨類似的問題。我們存儲了數百萬行,如果有人在沒有任何標準的情況下進行搜索,它會從字面上返回數以千計的每行20行的頁面,因此我們強迫用戶通過搜索表單選擇某種類型的搜索條件。通過強制它們進入,即使是看似平淡的搜索細節,我們也可以將匹配行的數量減少數千個,這有助於提高整體性能。

+0

感謝您的回覆。雅虎或谷歌搜索引擎我們認爲是問題。這是幾頁,減慢我們的網站。我們實現了javascript頁面,因此搜索引擎不會太深入。我相信這可能解決了這個問題。我們將升級服務器內存,以查看在導航到11,000頁及以上時是否解決了緩慢問題。我認爲服務器只需要熱身,但可能沒有足夠的內存來完成。我會很快看到 – Luke101 2012-01-31 18:31:20

+0

搞笑,我們剛剛遇到同樣的問題。機器人以瘋狂的請求毆打我們的服務器。如果特定的機器人在$ y時間內超過$ x個請求,我們最終不得不添加一個節流機制來引發503響應。 – 2012-01-31 18:52:38

1

嘗試使用mysql的explain功能來幫助您確定查詢速度如此之慢的原因。另外看看你的索引,以及你從哪裏索引。

在這個頁面:

「隨着EXPLAIN的幫助下,你可以看到你應該使用索引來查找行,以便執行該語句表中添加索引更快您還可以使用EXPLAIN來。檢查優化器是否以最優順序加入表。「

相關問題