mysql> select count(*) from num;
+----------+| count(*) |
+----------+| 9918530 |
+----------+1 row in set (59.18 sec)这也太恐怖了吧?我换成了sqlite3 ,2秒搞定。
1 回答
holdtom
TA贡献1805条经验 获得超10个赞
不要听上面一些误导,让你count主键的,效果一样。因为mysql发现你count主键内部直接给你换成count(*)。
因为不知道你的表结构和索引状况,所以我就只能猜测一下并给出建议:
1.我猜测你用的应该不是myisam引擎,因为mysaim引擎下的count()是记录在schema表中,直接获取数字即可。如果你的count()带条件了,那么myisam也会变慢。
2.看起来好像可能你用的应该是innodb引擎,你用count(*)是正确的选择,但是它就是慢。比较好的优化方案请参考加redis或者memcache缓存,如果不想引入新的存储结构,你可以通过在mysql中建立一个冗余字段来记录总数。
你可以去读一下《高性能mysql》的相关章节。
添加回答
举报
0/150
提交
取消