鍍金池/ 問答/數(shù)據(jù)庫  HTML/ select count(*)的時間太長了吧?

select count(*)的時間太長了吧?

mysql> select  count(*) from num;
+----------+
| count(*) |
+----------+
|  9918530 |
+----------+
1 row in set (59.18 sec)

這也太恐怖了吧?
我換成了sqlite3 ,2秒搞定。

回答
編輯回答
別瞎鬧

MyISAM引擎下會有自動維護(hù)這個的,可以更快。

2017年1月21日 23:39
編輯回答
落殤

mysql開啟查詢緩存,這個肯定不要2秒。如果寫入很少的話,開啟查詢緩存吧

2018年7月10日 22:01
編輯回答
心上人

MySQL高性能第三版
第六章 236頁
已經(jīng)千萬條數(shù)據(jù)了,不應(yīng)該這么統(tǒng)計

2017年5月4日 23:45
編輯回答
舊言

不要聽上面一些誤導(dǎo),讓你count主鍵的,效果一樣。因為mysql發(fā)現(xiàn)你count主鍵內(nèi)部直接給你換成count(*)。

因為不知道你的表結(jié)構(gòu)和索引狀況,所以我就只能猜測一下并給出建議:

1.我猜測你用的應(yīng)該不是myisam引擎,因為mysaim引擎下的count()是記錄在schema表中,直接獲取數(shù)字即可。如果你的count()帶條件了,那么myisam也會變慢。

2.看起來好像可能你用的應(yīng)該是innodb引擎,你用count(*)是正確的選擇,但是它就是慢。比較好的優(yōu)化方案請參考加redis或者memcache緩存,如果不想引入新的存儲結(jié)構(gòu),你可以通過在mysql中建立一個冗余字段來記錄總數(shù)。

你可以去讀一下《高性能mysql》的相關(guān)章節(jié)。

2018年2月18日 04:42
編輯回答
互擼娃

為啥可變長度類型查詢速度比主鍵還快?

2018年1月26日 04:36
編輯回答
孤客

內(nèi)存庫比數(shù)據(jù)庫讀IO速度快,有問題嗎?sqlite比mysql慢才奇怪

2018年8月24日 00:24
編輯回答
故林
mysql> describe num;
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
adsh varchar(20) NO NULL
tag varchar(256) NO NULL

10 rows in set (0.49 sec)

mysql> select count(id) from num;
count(id)
9918530

1 row in set (46.95 sec)

mysql> select count(adsh) from num;
count(adsh)
9918530

1 row in set (30.91 sec)

mysql> select count(tag) from num;
count(tag)
9918530

1 row in set (27.54 sec)

mysql> ALTER TABLE num ENGINE = 'MYISAM';
Query OK, 9918530 rows affected (3 min 5.07 sec)
Records: 9918530 Duplicates: 0 Warnings: 0

mysql> select count(*) from num;
+----------+
| count(*) |
+----------+
|  9918530 |
+----------+
1 row in set (0.02 sec)
2017年12月10日 07:44