百萬級資料count(1)慢怎么處理?
uj5u.com熱心網友回復:
百萬資料, 就一個count 應該是毛毛雨啊...uj5u.com熱心網友回復:
你這個count不是主鍵,修改程式增加統計欄位uj5u.com熱心網友回復:
看是否用到了 主鍵索引吧。uj5u.com熱心網友回復:
都沒有這方面的經驗嗎?現在是700萬資料大概統計要7秒左右,不要百度的回單count(欄位)>count(1)>count(*)之類的,或者是通過觸發器來做,我想學一下大神用mysql碰到一定數量級的情況,是怎么考慮的。uj5u.com熱心網友回復:
不帶條件可以查tables表uj5u.com熱心網友回復:
剛寫完一個同類問題,把寫的答案再貼一遍方法1:改用MyISAM引擎,InnoDB引擎執行count(*)的時候,需要把資料一行一行地從引擎里面讀出來,然后累積計數,所以效率低。(陳述句后面有where條件時候用MyISAM引擎效率也會大打折扣。)
方法2:用 redis 做個計數器
方法3:分表
uj5u.com熱心網友回復:
加索引吧!count性能分析
uj5u.com熱心網友回復:
正常速度,取決于你的硬體另外,mysql不支持單查詢并行,所以這種處理它的效率很低,你可以嘗試自己在程式中并行分段查詢
uj5u.com熱心網友回復:
在騰訊云上最爛的mysql上,100W條記錄,零點幾秒。如果id是自增且連續的的,取max,或者最后一條記錄就行。
如果不要求精確,可以查元資料表。
uj5u.com熱心網友回復:
這個量級的資料mysql無解。建議你把資料做成寬表,同步到Elasticsearch ,Elasticsearch 最適合做聚合分析。
uj5u.com熱心網友回復:
這個數量級應該不是問題。我針對count()謝過5篇總結文章。這里簡單說下:
1.如果表內有自增張欄位(最好也是主鍵),在沒有where 的情況且表記錄不做洗掉情況下,可以使用max(主鍵)
2.如果是有where,取一個區間,可以max(主鍵)-min(主鍵)+1來獲得
3.count(*)和count(1),根據官方檔案說明沒有性能區別,建議使用前者
4.count(欄位)這種用法,如果欄位沒有null值,則與count(*)一致;如果有null值存在,其不會統計null行
5.如果不要求精確可以使用explain+sql 來獲得估算值,誤差大約10%左右; information_schema.`TABLES表記憶體儲有所有表的估算值。
uj5u.com熱心網友回復:
https://blog.csdn.net/dfy11011/article/details/106143617轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/18268.html
標籤:MySQL
