为了账号安全,请及时绑定邮箱和手机立即绑定

select count(*)的时间太长了吧?

select count(*)的时间太长了吧?

胡子哥哥 2018-09-24 14:50:16
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》的相关章节。


查看完整回答
1 反对 回复 2018-09-24
  • 1 回答
  • 0 关注
  • 3317 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信