2011-06-08 82 views

回答

1

你剛剛嘗試索引列並將它們傾倒出來嗎?我會先嚐試一下,看看錶演是否不夠充分,然後才能充滿異國情調。

+0

如果這還不夠快,我會嘗試某種全文索引(如lucene)來進行排序,然後獲取所需的信息 – joekarl 2011-06-08 06:28:47

0

這取決於你如何定義高效。 CPU /內存/ IO /時間/編碼的努力。在這種情況下重要的是什麼?

「select_ from big_table order by the_varchar_column」這可能是開發人員資源最有效的用法。添加索引可能會使其運行速度更快。

2

MySQL可以處理10億行。效率取決於3個主要因素:緩衝區,索引和連接。

幾點建議:

嘗試,以適應數據集,你在內存的工作

處理內存中是如此之快,你有一大堆的解決只是這樣做的問題。使用多臺服務器來託管部分數據集。你要去的數據存儲部分臨時表與合作等

體型全表掃描,索引訪問

大數據集的全表掃描往往快於範圍掃描和其他類型的索引查找。即使您查看1%或行或更少的全表掃描可能會更快。

避免加入到大表

加入的使用嵌套循環是非常昂貴的大型數據集。儘量避免它。連接到較小的表是可以的,但您可能希望在連接之前將它們預加載到內存中,因此不需要隨機IO來填充緩存。

請注意MySQL的侷限性,這要求您對大數據集進行額外的仔細處理。在MySQL中,一個查詢作爲一個單獨的線程運行(不受MySQL簇的限制),並且MySQL爲查詢執行逐個發出IO請求,這意味着如果單個查詢執行時間是您關心的問題,那麼許多硬盤驅動器和大量CPU將無法提供幫助。

有時最好將查詢手動拆分爲幾個,並行運行並聚合結果集。

你沒有給出有關你的設置或你的數據集的很多信息,但是這應該給你一些關於要注意什麼的線索。在我看來,使用(適當調優的)數據庫對你進行排序會比編程更快,除非你有你的文章中沒有提到的非常具體的需求。