首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL中count函数的使用技巧和性能优化

count函数是MySQL中最常用的函数,其作用主要是用来统计结果集中的行数。

count()函数有三种常见用法:

1)count(*) 返回满足查询条件的结果集的行数;

2)count(常量) 跟count(*)一样;

3)count(字段) 返回满足查询条件且相关列不为NULL的结果集行数;

由上可以看出,最简单的区别是,用列名做参数时,相关列为NULL的行是不会算进统计结果的。那他们在性能上有区别吗?

count(*) 是SQL92定义的标准统计行数的语法,所以MySQL数据库对他进行过很多优化。

1)MyISAM引擎,MyISAM数据库是表级锁,不会有并发的数据库行数修改,所以MyISAM做了一个简单的优化,将表的总行数单独记录了下来,查询时,直接返回这个值就可以了;

2)InnoDB引擎,InnoDB支持事务,其大部分操作都是行级锁,因此无法记录表的总行数。但是InnoDB会选取一个最小的非聚簇索引来进行全表扫描,从而提高效率,节省时间。

当然上述的优化都是在没有where和group的条件下进行的。

count(1)与count(*) 的区别众说纷纭,在MySQL官方文档上,说两者的优化是一样的,没有区别,但还是建议使用count(*);

count(字段) 则是直接扫描全表,然后判断字段的值是否为NULL,不为NULL则累加。因为多了一步判断NULL的过程,因此,其效率要低于count(*)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191111A0HN5000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券