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

为什么SELECT 1的多行COUNT(*)始终为1?

这个问题涉及到数据库查询和计数的操作。我们先来了解一下这个问题的背景。

在数据库中,SELECT语句用于查询数据,而COUNT(*)函数用于计算查询结果中的行数。当我们执行SELECT 1时,实际上是在查询一个常量值1,而不是查询表中的数据。因此,查询结果始终只有一行,无论表中有多少数据。

当我们在这个查询结果上使用COUNT()函数时,实际上是在计算查询结果中的行数。由于SELECT 1始终只返回一行,因此COUNT()始终为1。

这个问题并不涉及到云计算或其他特定的技术,而是一个通用的数据库查询和计数操作问题。如果您需要更多关于数据库查询和计数操作的信息,可以查阅相关的数据库文档或教程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Select count(*)、Count(1)、Count(0)的区别和执行效率比较

结论 https://www.cnblogs.com/sueris/p/6650301.html 这里把上面实验的结果总结一下: count()和count(1)执行的效率是完全一样的。...count()的执行效率比count(col)高,因此可以用count()的时候就不要去用count(col)。...如果是对特定的列做count的话建立这个列的非聚集索引能对count有很大的帮助。 如果经常count()的话则可以找一个最小的col建立非聚集索引以避免全表扫描而影响整体性能。...在不加WHERE限制条件的情况下,COUNT()与COUNT(COL)基本可以认为是等价的; 但是在有WHERE限制条件的情况下,COUNT()会比COUNT(COL)快非常多; count(0)=...count(1)=count(*) count(指定的有效值)--执行计划都会转化为count(*) 如果指定的是列名,会判断是否有null,null不计算 当然,在建立优化count的索引之前一定要考虑新建立的索引会不会对别的查询有影响

1.4K20

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

首先,准备测试数据,11g库表bisal的id1列是主键(确保id1列为非空),id2列包含空值, ?...我们分别用10053打印如下4组SQL的trace, SQL1:select count(*) from bisal; SQL2:select count(1) from bisal; SQL3:select...count(id1) from bisal; SQL4:select count(id2) from bisal; 我们来看下这四个SQL的执行结果, ?...可以看出一个问题,就是这三个SQL经过Oracle转换,执行的SQL其实都是select count(*) from bisal,因此对应的执行计划成本选择,这三个SQL相同, ?...总结: 11g下,通过实验结论,说明了count()、count(1)和count(主键索引字段)其实都是执行的count(),而且会选择索引的FFS扫描方式,count(包含空值的列)这种方式一方面会使用全表扫描

3.4K30
  • count(*) count(1)与count(col)的区别

    一、执行结果 count(*) 和count(1) 都是统计行数,而count(col) 是统计col列非null的行数 二、执行计划   MyISAM与InnoDB,正如在不同的存储引擎中,count...count(字段) 1、如果这个字段定义为not null的话,一行行地从记录里面读出这个字段,判断不能为null,按行累计加1 2、如果这个字段定义允许为null,一行行地从记录里面读出这个字段,执行的时候还要判断是否为...null,不为null的按行累计加1,返回累加值 三、执行效率   1、如果在开发中确实需要用到count()聚合,那么优先考虑count(*),因为mysql本身对于count(*)做了特别的优化处理...有主键或联合主键的情况下,count(*)略比count(1)快一些。  没有主键的情况下count(1)比count(*)快一些。  如果表只有一个字段,则count(*)是最快的。...3、count(字段),非主键字段,这样的使用方式最好不要出现,因为它不会走索引。 count(主键ID)比count(1)慢的原因?

    4.5K21

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

    2、count(1) and count(字段) 两者的主要区别是 count(1) 会统计表中的所有的记录数,包含字段为null 的记录。...count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。...,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL count(列名)只包括列名那一列,在统计结果的时候...,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。...(*) 如果有主键,则 select count(主键)的执行效率是最优的 如果表只有一个字段,则 select count(*)最优。

    1.6K30

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

    2、count(1) and count(字段) 两者的主要区别是 count(1) 会统计表中的所有的记录数,包含字段为null 的记录。...count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。...,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL count(列名)只包括列名那一列,在统计结果的时候...,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。...(*) 如果有主键,则 select count(主键)的执行效率是最优的 如果表只有一个字段,则 select count(*)最优。

    3.1K10

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

    为统计记录数,由SELECT返回。...count(1)比count()效率高。 count(字段)是检索表中的该字段的非空行数,不统计这个字段值为null的记录。...count(1) and count(字段) count(1) 会统计表中的所有的记录数,包含字段为null 的记录 count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。...用1代表代码行,在统计结果的时候,不会忽略列值为NULL count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL...如果有主键,则 select count(主键)的执行效率是最优的 如果表只有一个字段,则 select count()最优。

    3.5K20

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

    3.2 COUNT(1) 的执行过程? 3.3 COUNT(*) 的执行过程? 3.4 COUNT(字段) 的执行过程? 3.5 小结 4.为什么要通过遍历的方式来计数?...2.COUNT(*) COUNT(1) 与 COUNT(列) 的功能? COUNT(*) 返回结果集中所有记录数,包含字段为 NULL 的记录。 COUNT(1) 功能上等同于 COUNT(*)。...server 层,然后读取记录中的 id 值,就会 id 值判断是否为 NULL,如果不为 NULL(主键不能为 NULL),就将 count 变量加 1。...意思是 InnoDB 以相同的方式处理 SELECT COUNT(*) 和 SELECT COUNT(1) 操作。没有性能差异。 3.4 COUNT(字段) 的执行过程?...4.为什么要通过遍历的方式来计数? 你可能会好奇,为什么 COUNT 函数需要通过遍历的方式来统计记录个数?

    34410

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

    COUNT 关于 COUNT 函数,在 MySQL 官网中有详细介绍: COUNT(expr) 返回 SELECT 语句检索的行中 expr 的值不为 NULL 的数量。...但是,值得注意的是,COUNT(*) 的统计结果中会包含值为 NULL 的行数。...★InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way....COUNT(字段) 最后,就是我们一直还没提到的 COUNT(字段),他的查询就比较简单粗暴了,就是进行全表扫描,然后判断指定字段的值是不是为 NULL,不为 NULL 则累加。...相比 COUNT(*),COUNT(字段) 多了一个步骤就是判断所查询的字段是否为 NULL,所以他的性能要比 COUNT(*) 慢。 好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。

    60910

    案例解析:count(1)、count(*) 与 count(列名) 的执行区别

    其实不然,count(1)和count(*)都会对全表进行扫描,统计所有记录的条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。...2、count(1) and count(字段) 两者的主要区别是 1、count(1) 会统计表中的所有的记录数,包含字段为null 的记录。...2、count(字段)会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。...,在统计结果的时候,不会忽略列值为NULL count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计...如果有主键,则 select count(主键)的执行效率是最优的 如果表只有一个字段,则 select count(*)最优 mysql> create table counttest(name char

    1.5K11

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

    count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。...所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...至于分析性能差别的时候,记住这么几个原则: server 层要什么就给什么; InnoDB 只给必要的值; 现在的优化器只优化了 count(*) 的语义为“取行数”,其他“显而易见”的优化并没有做。...count(1) 扫描全表,但不取值,server层收到的每一行都是1,判断不可能是null,按值累加。...看到这里,你会说优化器就不能自己判断一下吗,主键 id 肯定是非空的,为什么不能按照 count(*) 来处理,多么简单的优化。当然 MySQL 专门针对这个语句进行优化也不是不可以。

    2.5K30

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

    count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。...所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...至于分析性能差别的时候,记住这么几个原则: server 层要什么就给什么; InnoDB 只给必要的值; 现在的优化器只优化了 count(*) 的语义为“取行数”,其他“显而易见”的优化并没有做...count(1) 扫描全表,但不取值,server层收到的每一行都是1,判断不可能是null,按值累加。...看到这里,你会说优化器就不能自己判断一下吗,主键 id 肯定是非空的,为什么不能按照 count(*) 来处理,多么简单的优化。当然 MySQL 专门针对这个语句进行优化也不是不可以。

    2.4K10

    如何理解select(1)、select(*)、select(column)背后的差异?

    先说结论select(1)、select(*)都是基于结果集进行的行数统计,统计到NULL行select(column)则受到索引设置的影响,默认会排除掉NULL行在数据库查询中,SELECT语句用于从数据库表中检索数据...SELECT (1)、SELECT (*)和SELECT (column)之间的差异主要在于它们返回的数据类型和范围:SELECT (1):这个语句返回一个单一的值,即数字1。...;SELECT count(1) from user2;SELECT count(*) from user2;SELECT count(id) from user2;SELECT 1 from user2...;SELECT * from user2;SELECT count(1) from user2;SELECT count(*) from user2;SELECT count(id) from user2...SELECT count(id) 则是会过滤掉NULL行。性能差异select(1)、select(*)则不会走索引。

    51000

    mysql面试题38:count(1)、count(*) 与 count(列名) 的区别

    函数进行数据统计时,有三种常见的用法:COUNT(1)、COUNT(*)和COUNT(列名)。...它们的区别如下: COUNT(1):在COUNT函数中使用1作为参数,表示统计行数。这种写法不会对具体的列进行操作,只会对行数进行计数。它会忽略列中的NULL值,只统计非NULL的行数。...与COUNT(1)不同的是,COUNT()会统计包括NULL值在内的所有行数,包括那些全部列值为NULL的行。...由于需要考虑NULL值,因此相对于COUNT(1),COUNT()的性能可能稍低一些。 COUNT(列名):在COUNT函数中使用具体的列名作为参数,表示统计该列的非NULL值的数量。...关键点:COUNT(1)和COUNT()用于统计行数,COUNT(1)忽略NULL值,而COUNT()包括NULL值。COUNT(列名)用于统计指定列的非NULL值的数量。

    37700

    一文搞清楚 MySQL count(*)、count(1)、count(col) 的区别

    SELECT COUNT(*)从 MySQL 5.7.18 开始,通过遍历最小的可用二级索引来InnoDB处理SELECT COUNT(*)语句,除非索引或优化器提示指示优化器使用不同的索引。...把一列中的name字段置为NULL,再进行count查询,结果返回999999 再把这列的NULL值置为空字符串,再进行count查询,结果返回1000000 所以,综上简单的使用索引字段统计行数能够命中索引...官网上有这么一句话,InnoDB handles SELECT COUNT( *) and SELECT COUNT(1) operations in the same way....翻译过来就是,InnoDB以同样的方式处理SELECT COUNT(*)和SELECT COUNT(1) 操作,没有性能差异。...COUNT(1)仅当第一列定义为 时才进行相同的优化NOT NULL。----来自MySQL官网 这些优化都是建立在没有where 和 group by的前提下的。

    1.5K10

    使用flexible后 不同设备的data-dpr还始终为1解决方法

    flexible是阿里团队开源的一个js库,使用flexible.js可以轻松搞定各种不同的移动端设备兼容自适应问题。...但是最近有朋友使用flexible.js插件,但是不管切换什么设备,data-dpr的值始终为1。 ?...=1, minimum-scale=1, user-scalable=no"> 其实flexible默认会查找name="viewport"或者name="flexible"的meta标签,当默认自己设定了...viewport,initial-scale="1",等等之后,相当于默认设置了dpr=1,或者name="flexible"下设置默认的 initial-dpr=1等默认值,这样flexible.js...是data-dpr=1的时候的值,iphone6,iphone5默认dpr为2,6plus为3 下面是flexible源码部分截图,这里注意只要meta有name=“viewport” 的都会被认为设置了默认值

    2.6K00

    数据库面试题【十九、count(字段) &count(主键 id) &count(1)&count(*)的区别】

    count(可空字段) 扫描全表,读到server层,判断字段可空,拿出该字段所有值,判断每一个值是否为空,不为空则累加 count(非空字段)与count(主键 id) 扫描全表,读到server层,...count(1) 扫描全表,但不取值,server层收到的每一行都是1,判断不可能是null,按值累加。...注意:count(1)执行速度比count(主键 id)快的原因:从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。 count(*) MySQL 执行count(*)在优化器做了专门优化。...看到这里,你会说优化器就不能自己判断一下吗,主键 id 肯定是非空的,为什么不能按照 count(*) 来处理,多么简单的优化。当然 MySQL 专门针对这个语句进行优化也不是不可以。...性能对比结论 count(可空字段) count(非空字段) = count(主键 id) count(1) ≈ count(*)

    65530
    领券