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)

相关推荐

  • 1000抖音粉丝99元,抖音刷粉丝有什么好处?

    技术1000抖音粉丝99元,抖音刷粉丝有什么好处?今天我们来聊聊抖音的涨粉的事情,有些朋友说,我看到了一个抖音粉丝非常高的人,但是没有什么作品。
    其实很多人都不知道,抖音平台的粉丝一般都是可以刷的,不过我当然知道是怎么样

    测评 2021年11月11日
  • 游戏加速首选香港轻量云

    技术游戏加速首选香港轻量云由于现在很多海外游戏都锁国区,或者大陆地区没有服务器,因此很多玩家都会利用SOCK5代理来防止锁区或者改善游戏的网络环境,那么自建SOCK5代理有什么推荐方案呢。建议首选香港轻量云规避在线限制

    礼包 2021年12月16日
  • 为什么晕车,一坐车就晕车是为什么呢

    技术为什么晕车,一坐车就晕车是为什么呢晕动病是汽车为什么晕车、轮船或飞机运动时所产生的颠簸、摇摆或旋转等任何形式的加速运动,刺激人体的前庭神经而发生的疾病。患者初时感觉上腹不适,继有恶心、面色苍白、出冷汗,旋即有眩晕、精

    生活 2021年11月1日
  • HBase如何实现保存异步

    技术HBase如何实现保存异步这篇文章主要介绍HBase如何实现保存异步,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 批量操作 如何提交任务?不管是单条数据 还是 批量数据 都是异步执行2 批

    攻略 2021年12月8日
  • Hibernate应用开发遇到的问题有哪些

    技术Hibernate应用开发遇到的问题有哪些这篇文章主要讲解了“Hibernate应用开发遇到的问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernat

    攻略 2021年12月4日
  • 如何在Azure上创建Web App部署Asp.NET Core应用

    技术如何在Azure上创建Web App部署Asp.NET Core应用本篇文章为大家展示了如何在Azure上创建Web App部署Asp.NET Core应用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章

    攻略 2021年11月19日