mysql的innodb因为使用的是聚簇索引,导致count的时候按照索引count,会把聚簇索引里面的数据一起扫描了,导致count起来非常慢,30w的数据,做一次count(*)竟然高达30多秒。
经过网上查询看到一个大佬的测试
https://imysql.cn/2008_06_24_speedup_innodb_count
发现一个技巧,可以额外创建一个字段,字段和主键ID数据一致,然后对该字段建索引,然后再使用count,这样速度就飞起了。
比如,select count(*) from article;
然后建立一个新字段,aid,数据和id一致,aid单独建立索引,然后搜索修改成,select count(*) from aritcle where aid>0;
*---------------------------- 做个更正----------------------
那个新建的 aid 字段不需要数据,直接建立,然后加索引就行了
select count(*) from aritcle where aid>-1;