回答
因爲在大多數情況下,您必須先對結果進行排序。例如,當您在Google上搜索時,you can view only up to 100 pages of results。對於給定的關鍵字(或關鍵字的組合),他們不會在1000個網站以外的頁面排序中進行排序。
分頁快。排序很慢。
這是一個非常模糊的問題。我們需要一個具體的例子來更好地瞭解這個問題。
Lubos是正確的,問題不在於你是尋呼的事實(這需要數據的大量斷絲),但你需要弄清楚什麼是真正打算在頁面上..
你需要頁面的事實意味着有很多數據。大量的數據需要很長的時間整理:)
我想你的意思pagination of the printed page - 這就是我砍我的牙齒。我打算爲這個頁面收集所有內容,定位(這裏有大量的規則,constrait引擎很有幫助)和理由......但顯然你是在討論在網頁上組織信息的過程。
對於這一點,我猜的數據庫訪問。磁盤訪問速度很慢。一旦你把它存在內存中,分類便宜。
當然在隨機查詢排序需要一些時間,但如果您遇到相同的分頁查詢的問題正在使用regulary,有兩種有毛病數據庫安裝(不正確地索引/根本沒有,內存太少等我不是一個DB-經理),或你正在做分頁嚴重錯誤:
大錯特錯:如將select * from hugetable where somecondition;
寫入一個數組,獲取array.length的頁數並選取相關的索引並對數組進行解析 - 然後爲每個頁面重複該操作......這就是我所說的嚴重錯誤。
更好的解決方案兩個查詢:一個只獲得計數,然後另一個使用limit
和offset
獲得結果。 (一些專有的,非標準的sql服務器可能有一個查詢選項,我不知道)
糟糕的解決方案可能實際上工作相當不錯在小型表(實際上它是不可想象的,它是非常小的表上更快,因爲製作兩個查詢的開銷比獲取一個查詢中的所有行要大,我並不是說它是所以......)但是一旦數據庫開始增長,問題就會變得明顯。
LIMIT與大偏移量以及ORDER BY或GROUP BY的組合仍然可能非常耗費資源,這就是爲什麼Google沒有得到完整的計數(超過1000個結果,它是「估計值」),也沒有分頁超過前1000個結果。 – thomasrutter 2009-02-27 15:05:28
這個問題似乎很好覆蓋,但因爲它抓住了很多人,我會加一點東西MySQL的具體:
避免使用SQL_CALC_FOUND_ROWS
。除非數據集是微不足道的,否則在兩個單獨的查詢中計數匹配和檢索x個匹配的數量將會快得多。 (如果它是瑣碎,你幾乎不會注意到任何方式的差異。)
晚餐後,通過SO隨意瀏覽,一個有趣的提示,10分鐘的測試,然後10分鐘的調整,等瞧,我的數據庫負載減半我的最重的網站!謝謝! – jTresidder 2008-12-17 23:09:55
- 1. 爲什麼文件處理如此昂貴的資源?
- 2. 爲什麼File.Open如此昂貴?
- 3. 爲什麼System.Drawing.Rectangle.getWidth()如此昂貴?
- 4. 爲什麼Wpf的DrawingContext.DrawText如此昂貴?
- 5. 爲什麼alpha混合如此昂貴?
- 6. 什麼構成昂貴的方法或資源?
- 7. 爲什麼NHibernate的AutoFlush檢查如此昂貴?
- 8. 爲什麼簽名密鑰如此昂貴?
- 9. 爲什麼擦除()函數如此昂貴?
- 10. 爲什麼類型檢查昂貴?
- 11. 爲什麼試塊價格昂貴?
- 12. 爲什麼類型轉換昂貴?
- 13. SQL爲什麼會變得昂貴?
- 14. 昂貴的包裝System.Numerics.VectorX - 爲什麼?
- 15. 此屬性調用昂貴
- 16. 爲什麼分配或初始化NSDateFormatter被視爲「昂貴」?
- 17. 什麼讓文件讀取沒有緩衝區如此昂貴?
- 18. 什麼是GCC昂貴的優化?
- 19. 什麼更昂貴?作業或聲明?
- 20. 陣列優化:什麼更昂貴?
- 21. 爲什麼Elasticsearch服務提供商那麼昂貴?
- 22. 昂貴的StaticResource
- 23. 爲什麼浮點操作被認爲是昂貴的?
- 24. 價格昂貴的REST風格的資源
- 25. 嘲諷驗收測試中的昂貴資源(rspec,黃瓜)
- 26. Hadoop流媒體---昂貴的共享資源(COOL)
- 27. 在不使用Singleton的情況下封裝昂貴的資源
- 28. 在靜態塊中放置昂貴的資源創建?
- 29. 如何昂貴或昂貴是用C++繼承
- 30. 爲什麼autorelease對iPhone應用程序特別危險/昂貴?
如果你看標題,這個問題是有道理的,當你讀到這個問題本身時,它會停止有意義的。 – 2009-03-24 16:00:16