mysql之count性能比较

mysql之count性能比较

1)count(1)、count(*)、count(列)使用场景
  • 如果要求统计的是表的结果集,使用count(1)或count(*)
  • 如果统计的是列值,使用count(列),count(列)不统计值为NULL的数据
    官方文档如下:
    这里写图片描述
  • 当查询count(主键)时,语义与count(*)、count(1)一样,但是性能存在差异,count(主键)性能最差,其他两个的性能差异跟数据库引擎有关。
    可使用以下脚本查看性能对比:
set profiling = 1;
SELECT SQL_NO_CACHE count(*) from t_pay_process_record;
SELECT SQL_NO_CACHE count(1) from t_pay_process_record;
SELECT SQL_NO_CACHE count(process_record_id) from t_pay_process_record;
show profiles;

结果如下:
这里写图片描述

2)count(1)、count(*)性能比较

count(1)与count(* )哪一个性能更好,有人说两者差不多,也有说count(1)比count(*)快,众说纷纭。
想要知道答案,最简单粗暴的方式是去看官方文档:
这里写图片描述
意思就是,Mysql引擎为InnoDB的时候,两者性能是一样的;
这里写图片描述
如果是MyISAM ,进行select count() 的时候,会对COUNT()进行优化,以快速返回,不会检索其他列,也不会检索WHERE子句,因为MyISAM 对存储了确切的行数,并且可以非常快速地访问,因此这种情况下count(* )会比count(1)会快一些,当然,如果数据表第一个列定义为NOT NULL,count(1)与count(*)性能差不多

官方文档地址:https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_count

如有不同意见,欢迎指正

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值