数据库的使用中,Count() 函数用于统计数据表的记录,返回匹配指定条件的行数。

三种Count() 函数 count(1)、count(*)、count(列名) 区别

1、 count(1)、count(*)

数据表的数据量很大时,对数据表作分析,使用 count(1) 比使用 count(*) 用时多。从执行计划看, count(1)、count(*)的效果是相同的,但实际 count(1)的执行用时相对较少(1w以内数据量)。如果count(1)是聚索引,id,那肯定是count(1)快,但是差的很小。因为 count(*) 会自动优化指定到某一个字段,所以没必要用count(1),用count(*) sql 会帮你完成优化,因此 count(1)和count(*)基本没有差别!

2、count(1)、 count(列名)

这两者的主要区别是:count(1) 统计的是数据表中的所有记录数,包含字段为 null 的记录;count(列名) 统计的是该字段在该表中出现的次数,会忽略字段为 null 的情况,不统计空记录。

3、count(1)、count(*)、count(列名)

在执行效果上:

  • count(*)包括了所有的列,返回表格中所有存在的行的总数包括值为null的行;
  • count(1)是用1代表代码行,在统计结果时,不会忽略列值为NULL ;
  • count(列名)只包括指定列名的计数(有默认值的列也会被计入),在统计结果时,会忽略列值为空(这里的空不是指空字符串或者0,而是null)的计数,即某个字段值为NULL时,不统计。

在执行效率上:  

  • 列名为主键时,count(列名)会比count(1)快  ,count(1) 和 count(主键) 一样,只扫描主键;
  • 列名不为主键时,count(1)会比count(列名)快  ;
  • 如果表中有多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
  • 如果有主键,则 select count(主键)的执行效率是最优的
  • 如果表只有一个字段,则 select count(*)最优。

count(主键) 不一定比count(其余索引) 快: 

索引是一种B+树的结构,以块为单位进行存储。假设块大小是1K,主键索引大小为4B,有一个字段A的索引大小为2B。 同样一个块,能存放256个主键索引,但是能存放512个字段A的索引。 假设总数据是2K条,意味着主键索引占用了8个块,而A字段索引占用了4个块,统计时用主键索引需要经历的块多,IO次数多,效率也比A字段索引慢。

Count() 函数总结

  • (1) 如果在开发中确实需要用到count()聚合,那么优先考虑count(*),因为mysql数据库本身对于count(*)做了特别的优化处理。
  • (2) 使用count()聚合函数后,最好不要跟where age = 1 这样的条件,会导致不走索引,降低查询效率,除非该字段已经建立了索引。使用count()聚合函数后,若有where条件,且where条件的字段未建立索引,则查询不会走索引,直接扫描了全表。
  • (3) count(字段),非主键字段,这样的使用方式最好不要出现,因为它不会走索引。

SQL中的三种count()函数相关推荐

  1. SQL中的三种去重方法

    在使用SQL提数的时候,常会遇到表内有重复值的时候,比如我们想得到 uv (独立访客),就需要做去重. 在 MySQL 中通常是使用 distinct 或 group by子句,但在支持窗口函数的 s ...

  2. SQL 中 Rank、row_number、dense_rank 三种排序函数的区别

    现有一张工资表,需要对其进行排名,工资相同的人并列排名,然后再排名,很多刚接触的小伙伴估计第一时间想到Rank()函数或row_number() 函数,但是结果出来后并不是自己想要的,在这里就给大家介 ...

  3. pdo_fetch执行mysql_PDO中执行SQL语句的三种方法

    在PDO中,我们可以使用三种方式来执行SQL语句,分别是 exec()方法,query方法,以及预处理语句prepare()和execute()方法~大理石构件来图加工 在上一篇文章<使用PDO ...

  4. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  5. 061 hive中的三种join与数据倾斜

    一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...

  6. C#中的三种委托方式:Func委托,Action委托,Predicate委托

    C#中的三种委托方式:Func委托,Action委托,Predicate委托. Func,Action,Predicate全面解析 首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如 ...

  7. SQL去重的三种方法汇总

    SQL去重的三种方法汇总 这里的去重是指:查询的时候, 不显示重复,并不是删除表中的重复项 1.distinct去重 注意的点:distinct 只能一列去重,当distinct后跟大于1个参数时,他 ...

  8. Oracle的join默认为,Oracle中的三种Join方法详解

    这里将为大家介绍Oracle中的三种Join方法,Nested loop join.Sort merge join和Hash join.整理出来以便帮助大家学习. 基本概念 Nested loop j ...

  9. MySQL buffer pool中的三种链

    三种page.三种list.LRU控制调优 一.innodb buffer pool中的三种页 1.free page:从未用过的页 2.clean page:干净的页,数据页的数据和磁盘一致 3.d ...

最新文章

  1. Linux小工具(4)之apt软件管理
  2. 项目经理怎么运用思维导图
  3. C语言enum(枚举)、指针、函数指针
  4. thymeleaf th:if 案例
  5. Kubernetes与Docker基本概念与常用命令对照
  6. Python基础--环境配置、编码风格、基础概念、基本数据类型(1)
  7. 创建初始脚本工具mkscript.sh
  8. 开发者说:当垃圾箱有了智慧
  9. 公司安排员工扫地,引发员工不满,程序员:保洁阿姨都请不起?
  10. 前置递增运算符(JS)
  11. 当xshell关闭时如何保持一个jar包程序在后台运行
  12. 三个有用的SQL辅助工具
  13. python,文件md5校验
  14. Linux服务器安全加固
  15. 普通IO口红外线接收(不用外部中断)
  16. html5图片并列排版,图片并列排版实现
  17. ArcGIS切片生成工具-ArcGIS缓存管理
  18. linux rz 快捷上传包或文件
  19. vue百度地图 驾车路线修改路径颜色,每条路径颜色不一样
  20. 【BigHereo 37】---L10---C++真题之 代码填空

热门文章

  1. linux tee错误日志,linux tee命令使用详解教程
  2. TikTok魅力无限!对话Z世代,布局品牌未来
  3. android 注册两次广播,android 4.4 动态注册+静态注册电话短信广播后收到两次onReceive回调的问题...
  4. 亚马逊收款方式,需要考虑哪些因素?
  5. 【数据结构与算法】期末考试必考重点复习知识指示
  6. 关于使用msiexec弹出windows installer问题
  7. VS2017生成解决方案报错,提示对路径的访问被拒绝
  8. 进击的二叉树 | 心中有树
  9. 联合索引最左匹配原则
  10. jenkins pipeline的parameters参数介绍