Mysql性能优化:为什么你的count(*)这么慢?
来源:互联网
原文:
Mysql性能优化:为什么你的count(*)这么慢?
导读
在开发中一定会用到统计一张表的行数,比如一个交易系统,老板会让你每天生成一个报表,这些统计信息少不了 sql 中的count函数。
但是随着记录越来越多,查询的速度会越来越慢,为什么会这样呢?Mysql内部到底是怎么处理的?
今天这篇文章将从Mysql内部对于count函数是怎样处理的?
本文首发于作者微信公众号【码猿技术专栏】Mysql性能优化:为什么你的count(*)这么慢?,原创不易,喜欢的请支持一下,谢谢!!!
count的实现方式
在Mysql中的不同的存储引擎对count函数有不同的实现方式。
MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高(没有where查询条件)。
InnoDB引擎并没有直接将总数存在磁盘上,在执行count(*)函数的时候需要一行一行的将数据读出来,然后累计总数。
为什么InnoDB不将总数存起来?
导读
在开发中一定会用到统计一张表