我想知道在性能方面,如果考慮mysql在非常非常非常非常非常非常多(> 1.000.000)記錄的表上選擇,使用sql「order by」更好地排序結果,或者在使用經典編程排序算法...有人有什麼建議嗎?是PHP排序比mysql「order by」更好?
坦克
我想知道在性能方面,如果考慮mysql在非常非常非常非常非常非常多(> 1.000.000)記錄的表上選擇,使用sql「order by」更好地排序結果,或者在使用經典編程排序算法...有人有什麼建議嗎?是PHP排序比mysql「order by」更好?
坦克
你比較優化的C語言實現的方法的系統,意在做的正是這個任務,另一個,你會在一個解釋腳本來實現。
基本上,用C寫的東西將是一個很大的速度比PHP編寫的同等功能,通過10倍至100
如前所述,毫無疑問,在所有它遠更有效地配置您的數據庫並讓它完成工作。
mySQL,手下。它已經過優化,可以使用索引。這在PHP中會很糟糕(你會很快達到memory_limit
)。
在你實際上是在你的應用程序的內存獲得記錄的假設情況那麼MySQL仍然會打敗你的應用程序的褲子,因爲如果你配置了數據庫權不會有排序。
我想要在1張Mio記錄的表中排序,您可以在索引中提供這個索引,該索引通常以B-Tree的形式實現,其中Mysql可以遍歷並獲取排序結果。
MySQL將獲勝。除了列出的其他理由之外,還有一個理由是,假設記錄已經存在於數據庫中,則不必將它們從數據庫中複製出來進行排序。並且分頁或分頁索引將會很容易並自動進行優化。
總之,如果數據庫可以做到這一點,數據庫應該這樣做,幾乎總是。
+1 - 傳輸數據進行排序將比在數據庫上執行排序要昂貴得多。 – 2010-09-01 18:24:09
有時候,如果你可以避免「使用臨時;使用filesort」這是值得的,但我沒有做過廣泛的測試。
1 SIMPLE favorites ref source_id,user2_id source_id 3 const 137 Using index; Using temporary; Using filesort
1 SIMPLE users eq_ref PRIMARY,updated PRIMARY 3 apm.favorites.target_id 1 Using where
不要問mysql的以按名稱排序的,在紅寶石我做
results.sort_by {|u| u.name.downcase}
產生的MySQL查詢變得更加簡單:
1 SIMPLE favorites ref source_id,user2_id source_id 3 const 137 Using index
1 SIMPLE users eq_ref PRIMARY,updated PRIMARY 3 apm.favorites.target_id 1 Using where
當然你不會想如果您返回的行數超過了幾百行,請執行此操作。
看起來你不知道數據庫是什麼。你可能認爲它不是像純文本文件那樣簡單的容器。它是數據處理軟件。設計用於訂購,過濾,聚合等等。雖然PHP不是數據處理軟件,但是超文本預處理器 – 2010-09-01 19:00:18