首页 > 其他分享 >count(列名)、count(1)和 count(*)有什么区别?

count(列名)、count(1)和 count(*)有什么区别?

时间:2023-05-05 21:25:14浏览次数:36  
标签:count 列值 区别 列名 NULL null 统计

在MySQL中,这几个都是统计操作,很多人在使用的时候,都使用的是count(1),这有没有问题?使用正确?达到了统计效果?

我们从效果和效率两方面来分析下

执行效果

count(*) 包括了所有的列,在统计时不会忽略列值为null的数据
count(1) 用1表示代码行,在统计时不会忽略列值为null的数据
count(列名)在统计时,会忽略列值为空的数据,就是说某个字段的值为null时不统计

简单来说,count(*) 和count(1) 都统计null列,count(列名)不统计null列

执行效率

1、InnoDB引擎

count(字段) < count(1) = count(*)

InnoDB通过遍历最小的可用二级索引来处理select count(*) 语句,除非索引或优化器提示指示优化器使用不同的索引
如果二级索引不存在,则通过扫描聚簇索引来处理

2、MyISAM引擎

count(字段) < count(1) <= count(*)

  • MyISAM存储了数据的准确行数,使用 count(*)会直接读取该行数
  • 当第一列定义为NOT NULL时,count(1)和count(*)一样
  • count(列名) 会遍历整个表,但不同的是,它会先获取列,然后判断是否为空,然后累加,因此count(列名)性能不如前两者

总结

  • 优先使用count(*),这是SQL92 定义的标准统计行数的语法,跟数据库无关,与NULL也无关
  • 在InnoDB中,count(1) 等同于count(*),统计NULL的话,使用谁都OK
  • count(列名) 是统计列值数量,不计NULL,相同列值算一个
 

标签:count,列值,区别,列名,NULL,null,统计
From: https://www.cnblogs.com/huozhonghun/p/17375372.html

相关文章

  • img标签的title和alt区别?png、jpg、gif这些图片格式区别?
    img标签的title和alt区别title是鼠标移入图片的时候显示的内容;alt是图片无法加载时显示的内容在SEO层面上,蜘蛛抓取不到图片的内容,所以在写img标签时为了增加SEO效果就要设置alt属性,来描述这张图是什么内容或者关键词png、jpg、gif图片格式区别png:无损压缩,尺寸体积要比......
  • title与h1区别?b与strong的区别?i 与em区别?
    title与h1的区别定义:title:概括了网站信息,可以告诉搜索引擎或者用户关于这个网站的内容主题是什么h1:文章主题内容,告诉蜘蛛我们的网站内容最主要的是什么区别:1.title是显示在网页标题上,而h1是显示在网页内容上2.站在SEO角度上看,title是页面权重最高的,其......
  • Java中为什么要使用Integer呢?阐述Integer与int的区别
    (1)设计Integer封装类型的原因是:Java本身就是一个面向对象的编程语言,一切操作都是以对象作为基础,如像ArrayList,HashSet,Hashtable,HashMap等集合类中存储的元素,只支持存储Object类型,又如同泛型的设计,统统表现出了Java对于封装类型的重用,而对于int,byte,short,float,char,long,double这......
  • 面试 v-if 和 v-show的区别
    v-if vs. v-show​v-if 是“真实的”按条件渲染,因为它确保了在切换时,条件区块内的事件监听器和子组件都会被销毁与重建。v-if 也是惰性的:如果在初次渲染时条件值为false,则不会做任何事。条件区块只有当条件首次变为true时才被渲染。相比之下,v-show 简单许多,元素无论初......
  • build、dev、generate、preview和postinstall的区别?
    这些指令是在package.json文件中定义的Nuxt.js命令。nuxtbuild:用于构建Nuxt.js应用程序生成静态文件和服务器端渲染的bundle文件。运行该命令后,将在.nuxt目录中生成生成的文件。nuxtdev:用于启动Nuxt.js应用程序的开发模式,该模式支持热更新和实时重新加载。运......
  • 页面引入css样式时,使用link和@import有什么区别
    css文件引入的方式有两种:1.HTML中使用link标签<linkrel="stylesheet"href="style.css/>2.css中使用@import@import"style.css"/*使用字符创*/@importurl("style.css")/*使用url地址*/link和@import区别link属于HTML标签,除了加载css外,还可以做很多其的他事,比......
  • 【继承类型:public、private、protected的区别】
    继承类型:public、private、protected的区别:当一个类派生自基类时,该基类可以通过公有(public)、私有(private)、保护(protected)三种方式被继承,实际应用中几乎不使用 protected 或 private 继承,通常使用 public 继承。继承语法: 继承规则:公有继承(public):当一个类派生自公有基......
  • 4-20mA转RS485和转RS232的区别
    4-20mA信号是工业上常用的模拟信号,转换成数字信号通常有RS485接口和RS232接口。从软件方面来说,这两种接口软件是完全一样兼容的,采集的时候编程也不需要特殊的区别。直接modbusRTU协议通讯或者字符协议通讯。而硬件方面试有区别的,RS485采用的是半双工通讯,同一时间只能有一个设备发......
  • 编译器优化选项和debug,release模式的区别(转)
    原文:https://blog.csdn.net/qq_41854911/article/details/129657879有时候,程序在Debug模式下运行的好好的,一Release就crash了。有时候,程序在Debug模式下崩溃了,Release模式下居然能正常运行。以上这种情况,可能很多人都遇到过。用C/C++的朋友都知道编译器编译有各种优化级别,编译......
  • const_cast,static_cast,dynamic_cast,reinterpret_cast的区别(转)
    原文:https://www.cnblogs.com/fancy-xt/p/5339177.htmlC++继承了C中的隐式和显式转换的方式。但这种转换并不是安全和严格的,加上C++本身对象模型的复杂性,C++增加了四个显示转换的关键字。(C++是强类型语言)经过编码测试,小结如下:const_cast:仅用于去掉完全同类型的const,volatile......