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

count(1) count(*) 与 count(列名)有什么区别

时间:2022-10-25 22:56:28浏览次数:39  
标签:count NULL 区别 列名 忽略 null 主键

 

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(*)最优。

 

标签:count,NULL,区别,列名,忽略,null,主键
From: https://www.cnblogs.com/wwkk/p/16826695.html

相关文章

  • SSO 单点登录和 OAuth2.0 的区别和理解
    一、概述SSO是SingleSignOn的缩写,OAuth是OpenAuthority的缩写,这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相似,但概念上又十分不同。SSO大家......
  • B/S架构与C/S架构的区别
    B/S架构与C/S架构什么是B/S架构?什么是C/S架构?B/S:Browser/Server,浏览器/服务器模式。生活中常见为各种网站,百度(www.baidu.com)等。C/S:Client/Server,客户端服务器模式。生......
  • 1.count(a)和count(*)的区别
    1.区别在于count(字段)不会算null,cout(*)会计算null。2.mysql5.7.18version之后,计算count(*)时候会优先走二级索引,因为二级索引的树更小。TRANSLATEwithxEnglis......
  • QWidget,QMainWindow和QDialog的区别
    在创建QtGuiApplication时,总会让你选择在QWidget,QMainWindow和QDialog中选择一个BaseClass。这三个类具体有什么区别呢?在Qt的手册和网上找了一些资料。先看官方的手......
  • 【Java[类与对象]】7-5 BankAccount类定义
    定义银行账户BankAccount类。私有数据成员:余额balance(整型)。公有成员方法:无参构造方法BankAccount():将账户余额初始化为0;带参构造方法BankAccount(intm):将账户余额初......
  • charles中Map、Rewrite、Breakpoints的区别
    Charles提供了Map功能、Rewrite功能、Breakpoints功能,都可以达到修改服务器返回内容的目的,这三者的差异是:MapMap功能适合长期的将某些请求重定向到另一个网络地址或本地......
  • 关于git中soft mixed hard的区别以及keep的理解
    关于git中softmixedhard的区别以及keep的理解 关于git中softmixedhard的区别以及keep的理解当使用回滚版本的时候,在使用hard、soft、mixed是不一样的1、hard①移......
  • USB typeA、B、C介绍以及区别
    一、USB物理接口二、USB类型介绍1、USBType-A  1.1概述USBType-A又可称为USB-A。相信这个接口大家不会陌生。直到现在不少PC、PC周边、手机充电器等等都依然......
  • k8s之serviceAccount创建
    1、创建serviceAccountvim serviceAccount.yaml---apiVersion:v1kind:ServiceAccountmetadata:name:springcloud-kubernetesnamespace:dev---kind:Rol......
  • 进程与线程的区别和联系
    1.概念   进程:表示计算机系统资源分配的基本单位,也是在进行中的程序。例如在电脑上打开一个应用或者程序,电脑就会创建一个进程,并且给进程分配系统资源(内存空间、I/O......