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

MYSQL 下 count(*)、count()、 count(1) 理解

结论: 执行效果上: count(*)包括了所有的,相当于行数,在统计结果的时候,不会忽略值为NULL count(1)包括了忽略所有,用1代表代码行,在统计结果的时候,不会忽略值为NULL...count(列名)只包括列名那一,在统计结果的时候,会忽略值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。...执行效率上: 列名为主键,count(列名)会比count(1)快 (待商榷) 列名不为主键,count(1)会比count(列名)快 (确定) 如果表多个并且没有主键,则 count(1) 的执行效率优于..., 无条件查询情况下 可以得到结论 count(主键) count(*) count(1) 效率远高于 count(非主键count(*) count(1), count(,主键)...COUNT(1)只有在第一被定义为NOT NULL时才进行与COUNT(*)相同的优化

2.5K41

性能大PK count(*)、count(1)和count()

难道 count(1) 的性能就比 count(*) 要好吗?...因为 count(*)自动会优化指定到那一个字段,所以没必要去 count(1),用 count(*) sql会帮你完成优化的,因此:count(1) 和 count(*)基本没有差别!...执行效果上: count(*)包括了所有的,相当于行数,在统计结果的时候,不会忽略值为null count(1)包括了忽略所有,用1代表代码行,在统计结果的时候,不会忽略值为null count...(列名)只包括列名那一,在统计结果的时候,会忽略值为空(这里的空不是只空字符串或者0,而是表示null 的计数,即某个字段值为null 时,不统计。...执行效率上: 列名为主键, count(列名) 会比 count(1)快 列名不为主键, count(1) 会比 count(列名)快 如果表多个并且没有主键,则 count(1) 的执行效率优于 count

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

select count(*)、count(1)、count(主键)和count(包含空值的)有何区别?

下班路上看见网上有人问一个问题: oracle 10g以后count(*)和count(非空)性能方面有什么区别?...首先,准备测试数据,11g库表bisal的id1是主键(确保id1为非空),id2包含空值, ?...count(id1) from bisal; SQL4:select count(id2) from bisal; 我们来看下这四个SQL的执行结果, ?...前三个均为表数据总量,第四个SQL结果是99999,仅包含非空记录数据量,说明若使用count(允许空值的),则统计的是非空记录的总数,空值记录不会统计,这可能和业务上的用意不同。...总结: 11g下,通过实验结论,说明了count()、count(1)和count(主键索引字段)其实都是执行的count(),而且会选择索引的FFS扫描方式,count(包含空值的)这种方式一方面会使用全表扫描

3.3K30

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

前言   相信在此之前,很多人都只是记忆,没去理解,只知道count(*)、count(1)包括了所有行,在统计结果的时候,不会忽略值为NULL,count(列名)只统计列名那一,在统计结果的时候,...---- 4. count(1),count(id),count(非索引),count(二级索引)的分析 来看看count(1) SELECT COUNT(1) FROM demo_info; 执行计划和...再看一下count(非索引) explain select count(common_field) from demo_info   对于count(非索引)来说,优化器选择全表扫描,说明只能在聚集索引的叶子结点顺序扫描...而对于其他二级索引count(二级索引),优化器只能选择包含我们指定的的索引去执行查询,只能去指定非聚集索引的B+树扫描 ,可能导致优化器选择的索引扫描代价并不是最小。...count(二级索引)只能选择包含我们指定的的索引去执行查询,可能导致优化器选择的索引执行的代价并不是最小。

1.4K20

好问题:count(1)、count(*)、count()有什么区别?

count(1) and count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!...所以没必要去count(1),用count(*),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别!...count(*) 和 count(1)和count(列名)区别 执行效果上: count(*)包括了所有的,相当于行数,在统计结果的时候,不会忽略值为NULL count(1)包括了忽略所有...,用1代表代码行,在统计结果的时候,不会忽略值为NULL count(列名)只包括列名那一,在统计结果的时候,会忽略值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为...执行效率上: 列名为主键,count(列名)会比count(1)快 列名不为主键,count(1)会比count(列名)快 如果表多个并且没有主键,则 count(1) 的执行效率优于 count

59810

count(*) count(id) count(1) count(字段)

---- count(id)   InnoDB引擎会遍历整张表,把每一行行的id值全部取出来,返回给server层,server层拿到id后,判断是不可能为空的,就按行累加。...count(1)   InnoDB引擎遍历整张表,但不取值,server层对于返回的每一行,放一个数字 1 进去,判断是不可能为空的,累计增加。...count(字段)   1.如果这个字段是定义为not null的话,一行行地从记录里面读出这个字段,判断不能为null,按行累加   2.如果这个字段定义允许为null的话,判断到有可能是...count(*)   不会把全部的字段取出来,而是做专门的优化,不取值,count(*)肯定不是null,按行累加。...总结:count(*)>count(1)>count(id)>count(字段)

1.5K10

MySQL count()函数及其优化count(1),count(*),count(字段)区别

(1),count(*),count(字段)区别 count(1)和count(*) 作用 都是检索表中所有记录行的数目,不论其是否包含null值 区别 count(1)比count(*)效率高 二 ....count(字段)与count(1)和count(*)的区别 count(字段)的作用是检索表中的这个字段的非空行数,不统计这个字段值为null的记录 任何情况下SELECT COUNT(1) FROM...WHERE COL2 = ‘value’ 的出现 如果表没有主键,那么count(1)比count(*)快 如果有主键,那么count(主键,联合主键)比count(*)快 如果表只有一个字段,count...(*)最快 count(1)跟count(主键)一样,只扫描主键。...count(*)跟count(非主键)一样,扫描整个表 明显前者更快一些。

2.6K60

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

首先要弄清楚 count() 的语义。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。...所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...count(可空字段) 扫描全表,读到server层,判断字段可空,拿出该字段所有值,判断每一个值是否为空,不为空则累加 count(非空字段)与count(主键 id) 扫描全表,读到server层,...注意:count(1)执行速度比count(主键 id)快的原因:从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。 count(*) MySQL 执行count(*)在优化器做了专门优化。...性能对比结论 count(可空字段) < count(非空字段) = count(主键 id) < count(1) ≈ count(*) 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

2.3K10

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

首先要弄清楚 count() 的语义。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。...所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...count(可空字段) 扫描全表,读到server层,判断字段可空,拿出该字段所有值,判断每一个值是否为空,不为空则累加 count(非空字段)与count(主键 id) 扫描全表,读到server层,...注意:count(1)执行速度比count(主键 id)快的原因:从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。 count(*) MySQL 执行count(*)在优化器做了专门优化。...性能对比结论 count(可空字段) < count(非空字段) = count(主键 id) < count(1) ≈ count(*)

2.5K30

count(1)、count(*) 与 count(列名) 的执行区别

所以没必要去count(1),用count(*),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别!...转自:http://www.cnblogs.com/Dhouse/p/6734837.html count(*) 和 count(1)和count(列名)区别 执行效果上: count(*)包括了所有的...,相当于行数,在统计结果的时候,不会忽略值为NULL count(1)包括了忽略所有,用1代表代码行,在统计结果的时候,不会忽略值为NULL count(列名)只包括列名那一,在统计结果的时候...,会忽略值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。...执行效率上: 列名为主键,count(列名)会比count(1)快 列名不为主键,count(1)会比count(列名)快 如果表多个并且没有主键,则 count(1) 的执行效率优于 count

1.6K30

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

(主键,联合主键)比count()快 如果表只有一个字段,count(*)最快 count(1)跟count(主键)一样,只扫描主键。...所以没必要去count(1),用count(),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别!...count(*) 和 count(1)和count(列名)区别 执行效果上: count(*)包括了所有的,相当于行数,在统计结果的时候,不会忽略值为NULL count(1)包括了忽略所有,...用1代表代码行,在统计结果的时候,不会忽略值为NULL count(列名)只包括列名那一,在统计结果的时候,会忽略值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL...执行效率 列名为主键,count(列名)会比count(1)快 列名不为主键,count(1)会比count(列名)快 如果表多个并且没有主键,则 count(1) 的执行效率优于 count()

3.4K20

count(1)、count(*) 与 count (列名) 的执行区别

执行效果: 1、count(1) and count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!...转自:http://www.cnblogs.com/Dhouse/p/6734837.html count(*) 和 count(1)和count(列名)区别 执行效果上: count(*)包括了所有的...,相当于行数,在统计结果的时候,不会忽略值为NULL count(1)包括了忽略所有,用1代表代码行,在统计结果的时候,不会忽略值为NULL count(列名)只包括列名那一,在统计结果的时候...,会忽略值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。...执行效率上: 列名为主键,count(列名)会比count(1)快 列名不为主键,count(1)会比count(列名)快 如果表多个并且没有主键,则 count(1) 的执行效率优于 count

3K10

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

在 MySQL 中,COUNT 函数是一个非常常用的聚合函数,它用于计算某或某表达式在查询结果中出现的次数。...但是,在实际使用过程中,我们可能会遇到不同的 COUNT 函数写法,比如 COUNT(*)、COUNT(主键id)、COUNT(字段) 和 COUNT(1),这些写法在效率上有何差别呢?...COUNT(*) 与 COUNT(主键id)首先,我们来看 COUNT(*) 与 COUNT(主键id) 这两个写法的区别。它们都可以用来计算查询结果集中记录的数量,但是,它们的语义是不相同的。...COUNT(字段) 表示计算该字段不为 NULL 的记录数,而 COUNT(1) 表示计算所有行数,这里需要注意的是,COUNT(1) 和 COUNT(*) 的作用是相同的。...在单表查询时,COUNT(1) 和 COUNT(字段) 的性能通常相同,因为它们使用的优化方案也相同。在多表查询时,COUNT(1) 通常比 COUNT(字段) 更快。

98530

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

在select count(?) from t这样的查询语句里面,count(*)、count(主键id)、count(字段)和count(1)等不同用法的性能,有哪些差别。...这里,首先你要弄清楚count()的语义。count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数不是NULL,累计值就加1,否则不加。最后返回累计值。...所以,count(*)、count(主键id)和count(1) 都表示返回满足条件的结果集的总行数;而count(字段),则表示返回满足条件的数据行里面,参数“字段”不为NULL的总个数。...但是count(*)是例外,并不会把全部字段取出来,而是专门做了优化,不取值。count(*)肯定不是null,按行累加。...所以结论是: 按照效率排序的话,count(字段)<count(主键id)<count(1)≈count(*),所以我建议你,尽量使用count(*)。

4.7K50

count(*) count(1)与count(col)的区别

一、执行结果 count(*) 和count(1) 都是统计行数,而count(col) 是统计col非null的行数 二、执行计划   MyISAM与InnoDB,正如在不同的存储引擎中,count...有主键或联合主键的情况下,count(*)略比count(1)快一些。  没有主键的情况下count(1)比count(*)快一些。  如果表只有一个字段,则count(*)是最快的。...3、count(字段),非主键字段,这样的使用方式最好不要出现,因为它不会走索引。 count(主键ID)比count(1)慢的原因?...从InnoDB引擎层返回ID会涉及到解析数据行、拷贝字段值的操作,因此count(主键 ID)执行要比count(1)执行慢。 count(主键id)走主键索引的时候效率较count(*)差的原因?...平时我们检索一的时候,基本上等值或范围查询,那么索引基数大的索引必然效率很高(符合走主键索引查找速度最快的原则)。

4.4K21

浅聊count(1)、count(*) 与 count(列名) 的区别

简单来说: COUNT(1) 和 COUNT(*) 表示的是直接查询符合条件的数据库表的行数。而 COUNT(列名) 表示的是查询符合条件的的值不为 NULL 的行数。...(*),count(id),count(id2)查询结果如下: select count(*),count(id),count(id2) from #bla results 7 3 2 COUNT(*...有些人认为COUNT(*) 在执行时会转换成 COUNT(1),因此 COUNT(1) 少了转换步骤,所以更快。...这个说法在某些情况下可能是正确的,因为 COUNT(*) 会返回表中所有行的数目,而 COUNT(1) 只需要计算行数而不需要检查值。...所以,对于 COUNT(1) 和 COUNT(*),MySQL 的优化是完全一样的,根本不存在谁比谁快! 那既然COUNT(*) 和 COUNT(1)一样,建议用哪个呢? 建议使用 COUNT(*)!

12110
领券