Count(*)优化
参考:Count(*)执行原理简介及优化
性能排序:count(*) = count(1) > count(主键) > count(字段)
场景描述:
对一张大表经常用 count() 来做统计,其实是很不好的。比如:表**t_order
共有1200+万条记录,已创建了二级索引,但是执行一次`select count() from t_order**`要花费差不多 5 秒!!!
优化方案:
- 近似值:如果业务对于统计个数不需要很精确,比如搜索引擎在搜索关键词的时候,给出的搜索结果条数是一个大概值。(
**SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']**
或**explain select count(*) from t_order**
) - 额外表保存计数值:如果是想精确的获取表的记录总数,我们可以将这个计数值保存到单独的一张计数表中。当我们在数据表插入一条记录的同时,将计数表中的计数字段 + 1。也就是说,在新增和删除操作时,我们需要额外维护这个计数表。