2008-08-27 78 views

回答

18

因爲在大多數情況下,您必須先對結果進行排序。例如,當您在Google上搜索時,you can view only up to 100 pages of results。對於給定的關鍵字(或關鍵字的組合),他們不會在1000個網站以外的頁面排序中進行排序。

分頁快。排序很慢。

2

這是一個非常模糊的問題。我們需要一個具體的例子來更好地瞭解這個問題。

+2

如果你看標題,這個問題是有道理的,當你讀到這個問題本身時,它會停止有意義的。 – 2009-03-24 16:00:16

3

Lubos是正確的,問題不在於你是尋呼的事實(這需要數據的大量斷絲),但你需要弄清楚什麼是真正打算在頁面上..

你需要頁面的事實意味着有很多數據。大量的數據需要很長的時間整理:)

1

我想你的意思pagination of the printed page - 這就是我砍我的牙齒。我打算爲這個頁面收集所有內容,定位(這裏有大量的規則,constrait引擎很有幫助)和理由......但顯然你是在討論在網頁上組織信息的過程。

對於這一點,我猜的數據庫訪問。磁盤訪問速度很慢。一旦你把它存在內存中,分類便宜。

0

當然在隨機查詢排序需要一些時間,但如果您遇到相同的分頁查詢的問題正在使用regulary,有兩種有毛病數據庫安裝(不正確地索引/根本沒有,內存太少等我不是一個DB-經理),或你正在做分頁嚴重錯誤:

大錯特錯:如將select * from hugetable where somecondition;寫入一個數組,獲取array.length的頁數並選取相關的索引並對數組進行解析 - 然後爲每個頁面重複該操作......這就是我所說的嚴重錯誤。

更好的解決方案兩個查詢:一個只獲得計數,然後另一個使用limitoffset獲得結果。 (一些專有的,非標準的sql服務器可能有一個查詢選項,我不知道)

糟糕的解決方案可能實際上工作相當不錯在小型表(實際上它是不可想象的,它是非常小的表上更快,因爲製作兩個查詢的開銷比獲取一個查詢中的所有行要大,我並不是說它所以......)但是一旦數據庫開始增長,問題就會變得明顯。

+0

LIMIT與大偏移量以及ORDER BY或GROUP BY的組合仍然可能非常耗費資源,這就是爲什麼Google沒有得到完整的計數(超過1000個結果,它是「估計值」),也沒有分頁超過前1000個結果。 – thomasrutter 2009-02-27 15:05:28

2

這個問題似乎很好覆蓋,但因爲它抓住了很多人,我會加一點東西MySQL的具體:

避免使用SQL_CALC_FOUND_ROWS。除非數據集是微不足道的,否則在兩個單獨的查詢中計數匹配和檢索x個匹配的數量將會快得多。 (如果它瑣碎,你幾乎不會注意到任何方式的差異。)

+2

晚餐後,通過SO隨意瀏覽,一個有趣的提示,10分鐘的測試,然後10分鐘的調整,等瞧,我的數據庫負載減半我的最重的網站!謝謝! – jTresidder 2008-12-17 23:09:55