我有10億行存儲在MYSQL中,我需要按字母順序輸出它們的varchar列,那麼最有效的方法是什麼。允許使用其他類似awk的linux實用程序。在MYSQL中通過一個varchar列快速排序10億行
0
A
回答
1
你剛剛嘗試索引列並將它們傾倒出來嗎?我會先嚐試一下,看看錶演是否不夠充分,然後才能充滿異國情調。
0
這取決於你如何定義高效。 CPU /內存/ IO /時間/編碼的努力。在這種情況下重要的是什麼?
「select_ from big_table order by the_varchar_column」這可能是開發人員資源最有效的用法。添加索引可能會使其運行速度更快。
2
MySQL可以處理10億行。效率取決於3個主要因素:緩衝區,索引和連接。
幾點建議:
嘗試,以適應數據集,你在內存的工作
處理內存中是如此之快,你有一大堆的解決只是這樣做的問題。使用多臺服務器來託管部分數據集。你要去的數據存儲部分臨時表與合作等
體型全表掃描,索引訪問
大數據集的全表掃描往往快於範圍掃描和其他類型的索引查找。即使您查看1%或行或更少的全表掃描可能會更快。
避免加入到大表
加入的使用嵌套循環是非常昂貴的大型數據集。儘量避免它。連接到較小的表是可以的,但您可能希望在連接之前將它們預加載到內存中,因此不需要隨機IO來填充緩存。
請注意MySQL的侷限性,這要求您對大數據集進行額外的仔細處理。在MySQL中,一個查詢作爲一個單獨的線程運行(不受MySQL簇的限制),並且MySQL爲查詢執行逐個發出IO請求,這意味着如果單個查詢執行時間是您關心的問題,那麼許多硬盤驅動器和大量CPU將無法提供幫助。
有時最好將查詢手動拆分爲幾個,並行運行並聚合結果集。
你沒有給出有關你的設置或你的數據集的很多信息,但是這應該給你一些關於要注意什麼的線索。在我看來,使用(適當調優的)數據庫對你進行排序會比編程更快,除非你有你的文章中沒有提到的非常具體的需求。
相關問題
- 1. 以第一個元素爲快速排序的快速排序
- 2. MySQL - 1億行表 - 一小時添加一列? - 我如何加快速度?
- 3. MySql - 無法對varchar列進行排序?
- 4. 無法通過陣列中正確快速排序
- 5. mysql varchar排序
- 6. 快速排序麻煩java.lang.ArrayIndexOutOfBoundsException:10
- 7. 從文本文件加載超過10億行到Oracle的快速方法
- 8. 通用快速排序
- 9. 緩慢的查詢Mysql 5.7通過varchar列排序
- 10. 將VARCHAR與另一個VARCHAR進行比較的快速方法
- 11. 快速排序2500元素在一個陣列中
- 12. Mysql:從60萬行快速獲得50行(其餘排除在外)中的10個隨機行快
- 13. MySQL - 通過在一個字段中搜索事件排序行
- 14. 並行快速排序由單線程快速排序
- 15. 通過mysql多個列排序
- 16. 通過字符串的長度在數組中快速排序
- 17. 如何在Vertica數據庫中通過數字排序varchar列?
- 18. MySQL的排序VARCHAR
- 19. 大型主鍵:10億行MySQL + InnoDB?
- 20. Java:通過多線程並行化快速排序
- 21. 快速排序不排序
- 22. 寫一個快速排序的幫助
- 23. 在JavaScript中使用過濾器進行快速排序
- 24. MySQL快速搜索varchar列中的匹配
- 25. 通過在雙向鏈表(Java)中交換節點進行快速排序
- 26. 通過一個快速無限循環
- 27. 通過cython中的cdef class屬性快速排序
- 28. 快速排序通過豪爾分區在r
- 29. 在快速排序程序中出錯
- 30. LISP中的快速排序
如果這還不夠快,我會嘗試某種全文索引(如lucene)來進行排序,然後獲取所需的信息 – joekarl 2011-06-08 06:28:47