首页
学习
活动
专区
工具
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.2K20

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

首先,准备测试数据,11g库表bisalid1列是主键(确保id1非空),id2列包含空值, ?...我们分别用10053打印如下4组SQLtrace, SQL1select 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

    MySQLcount(*)、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 函数需要通过遍历方式来统计记录个数?

    32510

    浅聊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(*) 慢。 好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。

    41610

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

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

    1.2K10

    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.3K10

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

    先说结论select1)、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行。性能差异select1)、select(*)则不会走索引。

    13200

    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值数量。

    23900

    一文搞清楚 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.4K10

    使用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默认dpr2,6plus3 下面是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(*)

    65430
    领券