mysql的count语句(mysql中count函数)

技术MySQL中count(1)、count(*)、count(字段)的区别有哪些这篇文章主要为大家展示了“MySQL中count(1)、count(*)、count(字段)的区别有哪些”,内容简而易懂,条理清晰,希望能

本文主要给大家展示“MySQL中count(1)、count(*)和count (field)有什么区别”,简单易懂,组织清晰,希望能帮你解决疑惑。让边肖带领大家学习《MySQL中count(1)、count(*)和count (field)有什么区别》一文。

关于数据库行数的统计,无论是MySQL还是Oracle,都有一个可以使用的函数,那就是COUNT。

但是,就是这个常用的COUNT函数,却隐藏着很多谜团,尤其是在面试的时候,如果不小心,就会被滥用。如果你不相信我,请试着回答以下问题:

1.COUNT怎么用?

2.COUNT(字段名)和COUNT(*)的查询结果有什么区别?

3.COUNT(1)和COUNT(*)有什么区别?

4.COUNT(1)和COUNT(*)之间哪个效率更高?

5.为什么建议《阿里巴巴Java开发手册》使用COUNT(*)

6.MySQL的MyISAM引擎对COUNT(*)做了哪些优化?

7.MySQL的InnoDB引擎对COUNT(*)做了哪些优化?

8.MySQL优化上面提到的COUNT(*)的关键前提是什么?

9.选择count (*)时,有无where条件有什么区别吗?

10.COUNT(*)、COUNT(1)、COUNT(字段名)的执行过程是怎样的?

如果以上10个问题都能正确回答,那么你就真的知道COUNT函数了。

00-1010 1,COUNT(expr),返回由SELECT语句检索的行数,该语句的expr值不为空。结果是一个BIGINT值。

2.如果查询结果没有找到任何记录,则返回0。

3.但是,值得注意的是,COUNT(*)的统计结果将包含空值的行数。

除了COUNT(id)和COUNT(*),还可以使用COUNT(常量)(如COUNT(1))来计算行数。这三种SQL语句有什么区别?哪个效率更高?为什么《阿里巴巴Java开发手册》中强制不使用COUNT(列名)或COUNT(常量)来代替COUNT(*)?

1.初识COUNT

COUNT(常量)和COUNT(*)表示数据库表中可以直接查询的行数。

COUNT(列空)表示满足查询条件的列值为非空的行数。

COUNT(*)是对SQL92定义的行进行计数的标准语法。因为是标准语法,MySQL数据库优化了很多。

SQL92是数据库的ANSI/ISO标准。它定义了一种语言(SQL)和数据库的行为(事务、隔离级别等)。).

2.COUNT(字段)、COUNT(常量)和COUNT(*)之间的区别

MySQL主要使用两个执行引擎:

InnoDB引擎

MyISAM引擎

MyISAM不支持事务;MyISAM中的锁是表级锁;InnoDB支持事务和行级锁。

3.COUNT(*)的优化

MyISAM做了一个简单的优化,分别记录了表中的总行数。如果执行count(*),只要没有where条件,就可以直接返回。MyISAM是表级锁,不会有并发的行操作,所以结果是准确的。

MyISAM

InnoDB不能使用这个缓存操作,因为它支持事务,大部分操作都是行级锁,可能会并行修改行,所以缓存记录不准确。

然而,InnoDB对COUNT(*)语句做了一些优化。

用低成本索引扫描表格,不关注表格的具体内容。

InnoDB中的索引分为聚集索引(主键索引)和非聚集索引(非主键索引)。聚集索引的叶节点保存整行记录,而非聚集索引的叶节点保存该行记录的主键的值。

MySQL将优先使用最小的非聚集索引来扫描表。

优化的前提是查询语句不包含where条件和group by条件。

InnoDB

MySQL官方文档这样说:

InnoDB以相同的方式处理SELECT COUNT(*)和SELECT COUNT(1)操作。性能没有差别。

所以,对于count(1)和count(*),MySQL优化完全一样,没有更快的了!

但是,仍然建议使用count(*),因为这是对SQL92定义的行进行计数的标准语法。

00-1010,扫描整个表确定指定字段的值是否为空,如果不为空则累加。

性能比计数(1)和计数(*)慢。

4.COUNT(*)和COUNT(1)

COUNT函数的用法主要用于统计行数。主要用法有COUNT(*)、COUNT(字段)和COUNT(1)。

因为COUNT(*)是SQL92定义的对行进行计数的标准语法,所以MySQL对其进行了大量优化。MyISAM会直接单独记录表中的总行数,以COUNT(*)进行查询,而InnoDB在扫描表时会选择最小的索引,以降低成本。当然,这些优化的前提是没有where和group的条件查询。

在InnoDB中COUNT(*)和COUNT(1)的实现没有区别,效率是一样的,但是COUNT(字段)需要对字段进行非null判断,所以效率NULL会更低。

因为COUNT(*)是SQL92定义的统计行数的标准语法,而且效率高,所以请直接使用COUNT(*)查询表中的行数!

以上就是《MySQL中count(1)、count(*)和count (field)有什么区别》一文的全部内容,感谢阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。想了解更多知识,请关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/155608.html

(0)

相关推荐

  • redis位图可以有过期时间吗(redis中的位图)

    技术redis中的位图是什么意思这篇文章将为大家详细讲解有关redis中的位图是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。位图位图,即大量bit组成的一个数据结构(每个bi

    攻略 2021年12月16日
  • ENVI 5.3软件安装教程,附带安装包获取方式)

    技术ENVI 5.3软件安装教程,附带安装包获取方式) ENVI 5.3软件安装教程(附带安装包获取方式)ENVI 5.3保姆级安装教程(附带安装包获取方式)
    ENVI(The Environment

    礼包 2021年11月7日
  • 什么是RDB和AOF

    技术什么是RDB和AOF这篇文章主要介绍“什么是RDB和AOF”,在日常操作中,相信很多人在什么是RDB和AOF问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是RDB和AOF”的疑惑有

    攻略 2021年10月22日
  • 赞美柳树的句子最短的,用简单一句话赞美倒垂柳的句子

    技术赞美柳树的句子最短的,用简单一句话赞美倒垂柳的句子1.春天是个温柔的小女孩,她跳着舞来了赞美柳树的句子最短的。这时的柳树发芽了,那些嫩绿的小芽犹如一个个刚出生的小宝宝探出小小的脑袋,看看这陌生的世界。一阵春风从远处吹

    生活 2021年10月22日
  • C++程序员应聘常见面试题有哪些

    技术C++程序员应聘常见面试题有哪些本篇内容主要讲解“C++程序员应聘常见面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++程序员应聘常见面试题有哪些”吧!试题

    攻略 2021年11月29日
  • yi的汉字,拼音“yi”都有哪些字

    技术yi的汉字,拼音“yi”都有哪些字一 乙 已 义 亿 弋 以 刈 忆 艺 失 仪 台 仡 议 伊 衣 圯 夷 钇 亦 屹 异 医 沂 诒 佁 矣 苡 佚 呓 役 抑 译 邑 依 祎 宜 怡 迤 饴 佾 峄 怿 易 绎

    生活 2021年10月28日