击关注上方“SQL数据库开发”,

设为“置顶或星标”,第一时间送达干货。

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 counttestgroup by name;
结果如下:

作者:BigoSprite

blog.csdn.net/iFuMI/article/details/77920767

——End——
后台回复关键字:1024,获取一份精心整理的技术干货后台回复关键字:进群,带你进入高手如云的交流群。

推荐阅读

  • MySQL 中一个双引号的错位引发的血案
  • 图文详解SQL中的事务+隔离级别+阻塞+死锁,看不懂找我!
  • 因为我的一个低级错误,生产数据库崩溃了近半小时

点击「」了解SQL训练营

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

  1. mysql数据表中取几列_MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 转自:http://www.baike369.com/content/?id=5355 在MySQL中创建数据库的目的是为了使用其中的数据. 使用sel ...

  2. SQL实用技巧:如何将表中某一列的部分数据合并到一行中

    select *,stuff(select ',' + fieldname from table1 for xml path(")),1,1,")  as  field from ...

  3. sql server 2008表中计算机,电脑删除SQLsever2008表格数据出现“不能删除”怎么办

    SQLsever2008专门用于大批量的数据存储和管理,适合服务器数据管理,电脑在编辑或删除总会出现一些故障问题.这不一些用户说电脑删除SQLsever2008表格数据出现"不能删除&quo ...

  4. 编写SQL语句,检索Customers表中所有的列,再编写另外的SELECT语句,仅检索顾客的ID

    问题: 编写SQL语句,检索Customers表中所有的列,再编写另外的SELECT语句,仅检索顾客的ID.使用注释,注释掉一条SELECT语句,以便运行另一条SELECT语句.(当然,要测试这两个语 ...

  5. 基础SQL Server 操作问题——仅当使用了列表并且IDENTITY_INSERT为ON时,才能为表中的标识列制定显示值

    在表中插入多条字段 问题一:仅当使用了列表并且IDENTITY_INSERT为ON时,才能为表中的标识列制定显示值 解决方法: 执行: SET IDENTITY_INSERT 表名 ON    //设 ...

  6. SQL删除表中某一列

    举例:在Uni表中删除qq列. 语法: ALTER TABLE 表名 DROP COLUMN 列名 代码: ALTER TABLE Uni DROP COLUMN qq 结果:

  7. SQL在表中增加一列

    语法: alter table 表名 add 列明 数据类型; 举例: 在Uni表中增加continent列. 代码: alter table Uni add continent nvarchar(5 ...

  8. SQL Server 将一个表中字段的值复制到另一个表的字段中

    原文:SQL Server 将一个表中字段的值复制到另一个表的字段中 具体方法如下 一:update 表2 set (要插入的列名)= select 表1.某一列 from 表1 left jion ...

  9. cockroachdb mysql_CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储...

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

最新文章

  1. 【五校联考6day2】yi
  2. 详解css样式处理的优先级
  3. c语言字符屏幕,C语言字符屏幕函数 - 编程资料 - Powered 万人网络编程学院 bcxy.yinese.com...
  4. 仿简书、淘宝等等App的View弹出效果
  5. Android框架之网络开发框架Volley
  6. java记事本保存_JAVA记事本关于保存
  7. visual studio 2010运行速度提速
  8. 让Jacob从当前路径读取dll文件及相关打包方法
  9. 小乌龟同步主支代码_《我的世界》游戏理论:人类,有没有可能就是一串“代码”?...
  10. VirtualBox Failed to open/create the internal network 错误处理
  11. BIM族库下载——10套知名地产Revit样板文件
  12. 网络可视化工具netron详细安装流程
  13. POJ 3689 Equations 题解 《挑战程序设计竞赛》
  14. 我将进化成一条狗(10)——长寿秘诀
  15. 利用火狐浏览器伪造IP地址,把自己IP改成美国
  16. Kinect(XBOX360)相机在ROS下标定
  17. mysql 三门课程平均分_平均分
  18. Kafka Sql:简单使用
  19. WGS84、GCJ-02、BD-09、图吧坐标简介及坐标转换实现(js版)
  20. HDU 4310 贪心算法 C++版

热门文章

  1. 区块链生态系统将崩溃、Rust 超越 Go、无服务器成主导,这十大计算机预测将成真?...
  2. 快手技术嘉年华喊你来参加啦!
  3. Dart 语言不如 Kotlin?这里列了 13 个原因
  4. 弃用 Cookie!
  5. 推荐系统经典模型 Wide Deep 论文剖析
  6. 传统银行的战略转型之路,长沙银行迈向数据驱动提质年
  7. Go语言潜力有目共睹,但它的Goroutine机制底层原理你了解吗?
  8. 斯坦福首位华人女院长,“人造皮肤”赋予机器和残疾人触觉
  9. @程序员,如何在编程面试中脱颖而出?
  10. GitHub标星近10万:只需5秒音源就能实时“克隆”你的声音!