首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL中count(字段) ,count(主键 id) ,count(1)和count(*)的区别

注:下面的讨论和结论是基于 InnoDB 引擎的。 首先要弄清楚 count() 的语义。...count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。...所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...至于分析性能差别的时候,记住这么几个原则: server 层要什么就给什么; InnoDB 只给必要的值; 现在的优化器只优化了 count(*) 的语义为“取行数”,其他“显而易见”的优化并没有做。...注意:count(1)执行速度比count(主键 id)快的原因:从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。 count(*) MySQL 执行count(*)在优化器做了专门优化。

2.5K30

MySQL中count(字段) ,count(主键 id) ,count(1)和count(*)的区别

注:下面的讨论和结论是基于 InnoDB 引擎的。 首先要弄清楚 count() 的语义。...count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。...所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...至于分析性能差别的时候,记住这么几个原则: server 层要什么就给什么; InnoDB 只给必要的值; 现在的优化器只优化了 count(*) 的语义为“取行数”,其他“显而易见”的优化并没有做...注意:count(1)执行速度比count(主键 id)快的原因:从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。 count(*) MySQL 执行count(*)在优化器做了专门优化。

2.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL中count是怎样执行的?———count(1),count(id),count(非索引列),count(二级索引列)的分析

    经常会看到这样的例子: 当你需要统计表中有多少数据的时候,会经常使用如下语句 SELECT COUNT(*) FROM demo_info;   由于聚集索引和非聚集索引中的记录是一一对应的,而非聚集索引记录中包含的列...如果我们使用非聚集索引执行上述查询,即统计一下非聚集索引uk_key2中共有多少条记录,是比直接统计聚集索引中的记录数节省很多I/O成本。所以优化器会决定使用非聚集索引uk_key2执行上述查询。...,所以其实读取任意一个索引中的记录都可以获取到id字段,此时优化器也会选择占用存储空间最小的那个索引来执行查询。...综上所述:   对于count(*)、count(常数)、count(主键)形式的count函数来说,优化器可以选择扫描成本最小的索引执行查询,从而提升效率,它们的执行过程是一样的,只不过在判断表达式是否为...NULL时选择不同的判断方式,这个判断为NULL的过程的代价可以忽略不计,所以我们可以认为count(*)、count(常数)、count(主键)所需要的代价是相同的。

    1.4K20

    MySQL中count(*)、count(主键id)、count(字段)和count(1)那种效率更高?

    在select count(?) from t这样的查询语句里面,count(*)、count(主键id)、count(字段)和count(1)等不同用法的性能,有哪些差别。...需要注意的是,下面的讨论还是基于InnoDB引擎的。 这里,首先你要弄清楚count()的语义。...所以,count(*)、count(主键id)和count(1) 都表示返回满足条件的结果集的总行数;而count(字段),则表示返回满足条件的数据行里面,参数“字段”不为NULL的总个数。...我们提到了在不同引擎中count(*)的实现方式是不一样的,也分析了用缓存系统来存储计数值存在的问题。...而把计数值也放在MySQL中,就解决了一致性视图的问题。 InnoDB引擎支持事务,我们利用好事务的原子性和隔离性,就可以简化在业务开发时的逻辑。这也是InnoDB引擎备受青睐的原因之一。

    4.8K50

    hadoop(3):简单运行和count小例子

    --- 下载 到hadoop官网下载对应的包 这里用的src带源码的hadoop2.7.1,因为需要自己编译(如果是32位的系统,直接下载编译的版本也行) 通过命令上传到linux后,解压 在目录下.../ 中也可以查看) ---- 安装yarn(资源调度) 也就是 hadoop1.x中对应的 JobTracker及TaskTracker 等的管理 (单独出来了,解耦了) 对应的配置 单结点yarn...---- 测试一些数据 到对应的目录,新建文件,输入一些数据 将文件放入 hdfs中(因为hadoop是读取hdfs中的数据的) hadoop的 fs 命令 bin/hadoop fs -help...#查案对应的帮助 fs的put命令上传到hdfs bin/hadoop fs -put ${文件绝对路径} ${hadoop相对路径} put之后,可以在 【端口50070 的监控页面,查看文件】...,应该都知道,这里略】) hadoop的jar命令 这里简单先用hadoop例子中的jar文件 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples

    74820

    MySQL中count(*)、count(主键id)、count(字段)和count(1)那种效率更高?「建议收藏」

    在select count(?) from t这样的查询语句里面,count(*)、count(主键id)、count(字段)和count(1)等不同用法的性能,有哪些差别。...需要注意的是,下面的讨论还是基于InnoDB引擎的。 这里,首先你要弄清楚count()的语义。...所以,count(*)、count(主键id)和count(1) 都表示返回满足条件的结果集的总行数;而count(字段),则表示返回满足条件的数据行里面,参数“字段”不为NULL的总个数。...我们提到了在不同引擎中count(*)的实现方式是不一样的,也分析了用缓存系统来存储计数值存在的问题。...而把计数值也放在MySQL中,就解决了一致性视图的问题。 InnoDB引擎支持事务,我们利用好事务的原子性和隔离性,就可以简化在业务开发时的逻辑。这也是InnoDB引擎备受青睐的原因之一。

    1.5K40

    MySQL 中 count(*) 比 count(1) 快?

    今天有人跟我讲 MySQL 中 count(1) 比 count(*) 快,这能忍?必须得和他掰扯掰扯。 声明:以下讨论基于 InnoDB 存储引擎,MyISAM 因为情况特殊我在文末会单独说一下。...: 可以看到,在主键索引中,叶子结点保存了每一行的数据。...而在普通索引中,叶子结点保存的是主键值,当我们使用普通索引去搜索数据的时候,先在叶子结点中找到主键,再拿着主键去主键索引中查找数据,相当于做了两次查找,这也就是我们平常所说的回表操作。...3.2 原理分析 不知道小伙伴们有没有注意过,我们学习 MySQL 的时候,count 函数是归在聚合函数那一类的,就是 avg、sum 等,count 函数和这些归在一起,说明它也是一个聚合函数。...可能有小伙伴知道,MyISAM 引擎中的 select count(*) from user; 操作执行起来是非常快的,那是因为 MyISAM 把表中的行数直接存在磁盘中了,需要的时候直接读取出来就行了

    1.4K10

    hadoop hdfs命令_hadooplinux命令

    命令参数 描述 --config--loglevel 指定一个默认的配置文件目录,默认值是: ${HADOOP_PREFIX}/conf. 重载Log级别。...用户命令: 对于Hadoop集群用户很有用的命令: dfs 使用: hdfs dfs [COMMAND [COMMAND_OPTIONS]] 在hadoop中运行支持文件系统的命令。...hdfs脚本支持fetchdt命令来获取DelegationToken(授权标识),并存储在本地文件系统的一个文件中。这样“非安全”的客户端可以使用该标识去访问受限的服务器(例如NameNode)。...管理员命令 下列这些命令对hadoop集群的管理员是非常有用的。...balance工具通常用于平衡hadoop集群中各datanode中的文件块分布,以避免出现部分datanode磁盘占用率高的问题 。管理员可以按Ctrl-C停止Balancer进程。

    80240

    面试必知 | MYSQL中count(*)、count(1)、count(col)之间的差异,你知道多少?

    在昨天的一篇闲聊《说说心里话》中,提到了面试中经常会被面试官问到的一个知识点:MYSQL中count(*)、count(1)、count(col)之间的差异;无论是面试开发岗,还是运维岗,这个问题被面试的几率是非常的大...通过上面四个执行计划对比发现: 在MYISAM表中,当表中只有主键的时候,count(*)和count(1)的效果都是一样的;但是count(col)出现了区别,也就是: 如果col是主键,那么count...通过上面四个执行计划对比发现: 在MYISAM表中,当表中即有主键由于普通索引的时候,count(*)和count(1)、count(主键列)的效果都是一样的,直接返回结果;count(普通索引列)使用普通索引...通过上面四个执行计划对比发现: 在INNODB表中,当表中只有主键的时候,count(*)和count(1)、count(主键列)的效果都是一样的,都会走主键索引;count(普通列)如果col是普通列...通过上面四个执行计划对比发现: 在INNODB表中,当表中即有主键又有普通索引的时候,count(*)和count(1)、count(主键列)、count(普通索引列)的效果都是一样的,都会走普通索引

    78620

    hadoop hdfs命令 脚本源码_hadoop启动hdfs命令

    hadoop集群搭建好之后,通过HDFS命令操作HDFS分布式文件系统,HDFS命令与linux命令类似 所有命令有/bin/hadoop脚本引发,可以使用命令查看帮助文档 hadoop fs-help...使用HDFS命令之前,必须启动hadoop集群,且命令执行在master节点上 hadoop常用命令 格式: hadoop fs -命令 [-选项] [文件/目录] 命令 说明 补充 hadoop fs...,其它类型会乱码)hadoop fs –test查看文件hadoop fs –tail查看文件 Linux本机和HDFS之间文件传输 即虚拟机的linux系统的文件与hadoop的HDFS分布式系统的文件之间的文件共享...-put命令,还可以接收输入stdin 将指定内容显示在屏幕上:echo [内容] 通过”|”(管道符pipe)将屏幕的内容传递存入文件(存入文件不能已经存在) 例:(注意有-put命令后还有...[hdfs] [linux] hadoop fs -get [hdfs] [linux] 可以进行文件重命名 hdfs下载的文件必须存在 可以下载目录 linux命令 命令 说明 cd 目录

    73110

    MySQL COUNT(*) COUNT(1) 与 COUNT(列) 的区别

    COUNT() 函数作用是统计符合查询条件的记录中,函数指定的参数不为 NULL 的记录有多少个。...那么,InnoDB 循环遍历聚簇索引(主键索引),将读取到的记录返回给 server 层,但是不会读取记录中的任何字段的值,因为 COUNT 函数的参数是 1,不是字段,所以不需要读取记录中的字段值。...这时,我们就可以使用 show table status 或者 explain 命令来表进行估算。...执行 explain 命令效率是很高的,因为它并不会真正的去查询,下图中的 rows 字段值就是 explain 命令对表 t_order 记录的估算值。...第二种:额外表保存表记录数 如果是想精确的获取表的记录总数,我们可以将这个计数值保存到单独的一张计数表中。 当我们在数据表插入一条记录的同时,将计数表中的计数字段 + 1。

    34410
    领券