点击上方 好好学java ,选择 星标 公众号

重磅资讯、干货,第一时间送达
今日推荐:干掉 Navicat:这个 IDEA 的兄弟真香!个人原创100W+访问量博客:点击前往,查看更多

来源:blog.csdn.net/iFuMI/article/details/77920767

1.  count(1) and count(*)

从执行计划来看,count(1)和count(*)的效果是一样的。

当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多!

当数据量在1W以内时,count(1)会比count(*)的用时少些,不过也差不了多少。

如果count(1)是聚集索引时,那肯定是count(1)快,但是差的很小。

因为count(*),会自动优化指定到那一个字段。所以没必要去count(1),使用count(*),sql会帮你完成优化的

因此:在有聚集索引时count(1)和count(*)基本没有差别!

2. count(1) and count(字段)

两者的主要区别是

  • count(1) 会统计表中的所有的记录数,包含字段为null 的记录。

  • count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。

    即不统计字段为null 的记录。

3. count(*) 和 count(1)和count(列名)区别  

执行效果上:

  • count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略为NULL的值。 

  • count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略为NULL的值

  • count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计

执行效率上:

  • 列名为主键,count(列名)会比count(1)快

  • 列名不为主键,count(1)会比count(列名)快

  • 如果表多个列并且没有主键,则 count(1 的执行效率优于 count(*)

  • 如果有主键,则 select count(主键)的执行效率是最优的

  • 如果表只有一个字段,则 select count(*)最优。

实例分析

create table counttest
(name char(1),
age char(2));insert into counttest values
('a', '14'),
('a', '15'),
('a', '15'),
('b', NULL),
('b', '16'),
('c', '17'),
('d', null),
('e', '');select name,
count(name),
count(1),
count(*),
count(age),
count(distinct(age))
from counttest
group by name;
结果如下:最后,再附上我历时三个月总结的 Java 面试 + Java 后端技术学习指南,笔者这几年及春招的总结,github 1.1k star,拿去不谢!下载方式1. 首先扫描下方二维码
2. 后台回复「Java面试」即可获取

执行COUNT(1)、COUNT(*) 与 COUNT(列名) 到底有什么区别?相关推荐

  1. sql 在某表中加入一列count所有数据_执行COUNT(1)、COUNT(*) 与 COUNT(列名) 到底有什么区别?...

    击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货. 1.  count(1) and count(*) 从执行计划来看,count(1)和 ...

  2. count(1)、count(*)、count(列名)的含义、区别、执行效率

    维护同事的代码发现他的 sql 查询记录条数都是 count(1),而我则习惯用 count(*),这有什么区别呢? 含义: 1.count(*) :统计所有的行数,包括为null的行(COUNT(* ...

  3. count(*)和count(1)和count(列名)的区别

    count是一种最简单的聚合函数,一般也是我们第一个开始学习的聚合函数,那么他们之间究竟由什么区别呢? 有的人说count(1)和count(*)他们之间有区别,而有的人说他们之间没有区别那么他们之间 ...

  4. 【优化】COUNT(1)、COUNT(*)、COUNT(常量)、COUNT(主键)、COUNT(ROWID)、COUNT(非空列)、COUNT(允许为空列)、COUNT(DISTINCT 列名)

    [优化]COUNT(1).COUNT(*).COUNT(常量).COUNT(主键).COUNT(ROWID).COUNT(非空列).COUNT(允许为空列).COUNT(DISTINCT 列名) 1. ...

  5. HiveSql面试题11详解(count(1)、count(*)和count(列名)的区别)

    从执行结果来看 - count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL - count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL ...

  6. count(列名)与count(*)、count(1)的区别

    count()函数的作用是用来计算指定列或整个表中的函数,count()函数有以下三种写法:count(列名) .count(1).count(*) . 其中,count(列名)只统计当前列中非空值的 ...

  7. count(*)、count(1)和count(列名)的区别

    count(*).count(1)和count(列名)的区别 1.执行效果上:   l  count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL l  count(1)包 ...

  8. mysql中对一个表的id建立了唯一索引,那么查询的select count(*) ,select count(1) ,select count(id),select count(列名)

    1.mysql中对一个表的id建立了唯一索引,那么查询的select count(*) ,select count(1) ,select count(id),select count(列名) 的查询结 ...

  9. sql count(1) count(*)区别_PostgreSQL的count(1)真的比count(*)快么?

    作者简介 张连壮,多年PostgreSQL数据库内核研发经验,高可用/数据复制方面经验较为丰富,目前主要从事分布式数据库Citus相关工作,CitusDB中国[站主]专注于Citus技术分享的全信息平 ...

最新文章

  1. 如何实现对ELK各组件的监控?试试Metricbeat
  2. SAP HANA:持续创新十周年
  3. 技嘉G31主板学习笔记
  4. c语言设计一个自动报警的程序,C语言程序设计试题(B卷)..doc
  5. linux 和 windows 上printf 的不同
  6. 5月16 JSON的一些知识点及AJAX的应用
  7. 手机适配鸿蒙教程,鸿蒙系统支持手机介绍
  8. 回文字符串(Palindromic_String)
  9. 100条常用写作谚语(5)(6)(7)(8)
  10. Spark精华问答 | spark性能优化方法
  11. Javascript中Base64编码解码的使用实例
  12. CES神吐槽:人工智能快要“烂大街”了?
  13. Samba的安装步骤
  14. 25.TCP/IP 详解卷1 --- SNMP:简单网络管理协议
  15. 如何干净的卸载Mac版VMware Fusion
  16. CAN总线概念(一)
  17. word中插入常用几种公式编辑器
  18. 佛说五百年的回眸才换来今生的擦肩而过
  19. java 中Shallow Heap与Retained Heap的区别
  20. 计算机桌面的内存设置方法,计算机内存不足【处理方法】

热门文章

  1. vprintf() 函数的用法。
  2. stm32篇--系统初始化
  3. 聚类算法(3):DBSCAN密度聚类
  4. 图形基础 GPU架构(5)GPU vs CPU
  5. 区块链BaaS云服务(33)印度国家支付 Vajra Platform“特性”
  6. (chap1 网络基础知识)地址
  7. 09-Maximum Power Mitigation Mechanism (MPMM)
  8. [trustzone]-ARM Core的扩展和ELx级别的切换过程
  9. 时间戳服务——信息安全(二)
  10. 疯狂打地鼠游戏核心代码(鼠标变锤子)