西安网站建设价格低,学校部门网站建设总结,百度云网盘资源,湖北网站建设搭建文章目录 为什么会出现这种情况呢?如何优化count(*)性能?增加redis缓存加二级缓存多线程执行减少join的表改成ClickHousecount的各种用法性能对比为什么会出现这种情况呢?
在Mysql中,count(*)的作用是统计表中记录的总行数。
而count()的性能跟存储引擎有直接关系,并非所… 文章目录 为什么会出现这种情况呢?如何优化count(*)性能?增加redis缓存加二级缓存多线程执行减少join的表改成ClickHouse count的各种用法性能对比 为什么会出现这种情况呢?
在Mysql中,count(*)的作用是统计表中记录的总行数。
而count()的性能跟存储引擎有直接关系,并非所有的存储引擎,count()的性能都很差。
在Mysql中使用最多的存储引擎是:innodb和myisam。
在myisam中会把总行数保存到磁盘上,使用count(*)时,只需要返回那个数据即可,无需额外的计算,所以执行效率很高。
而innodb则不同,由于它支持事务,有MVCC(即多版本并发控制)的存在,在同一个时间点的不同事务中,同一条查询sql,返回的记录行数可能是不确定的。
在innodb使用count(*)时,需要从存储引擎中一行行的读出数据,然后累加起来,所以执行效率很低。
如果表中数据量小还好,一旦表中数据量很大