很简单,就是为了统计记录数

由SELECT返回

为了理解这个函数,让我们祭出 employee_tbl 表

所有记录

统计行的总数

计算 Zara 的记录数

注意:由于 SQL 查询对大小写不敏感,所以在 WHERE 条件中,无论是写成 ZARA 还是 Zara,结果都是一样的

count(1),count(*),count(字段)区别

count(1)和count(*)

作用

都是检索表中所有记录行的数目,不论其是否包含null值

区别

count(1)比count(*)效率高

二 . count(字段)与count(1)和count(*)的区别

count(字段)的作用是检索表中的这个字段的非空行数,不统计这个字段值为null的记录任何情况下SELECT COUNT(1) FROM tablename是最优选择

尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种

杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现

如果表没有主键,那么count(1)比count(*)快

如果有主键,那么count(主键,联合主键)比count(*)快

如果表只有一个字段,count(*)最快

count(1)跟count(主键)一样,只扫描主键。

count(*)跟count(非主键)一样,扫描整个表

明显前者更快一些。

执行效果:count(1) and count(*)

当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count()用时多了!

从执行计划来看,count(1)和count()的效果是一样的。 但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少。

如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。

因为count(),自动会优化指定到那一个字段。所以没必要去count(1),用count(),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别!count(1) and count(字段)

两者的主要区别是

(1) count(1) 会统计表中的所有的记录数,包含字段为null 的记录。

(2) count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。

count(*) 和 count(1)和count(列名)区别

执行效果上:

count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL

count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL

count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

执行效率上:

列名为主键,count(列名)会比count(1)快

列名不为主键,count(1)会比count(列名)快

如果表多个列并且没有主键,则 count(1) 的执行效率优于 count()

如果有主键,则 select count(主键)的执行效率是最优的

如果表只有一个字段,则 select count()最优。

实例mysql> create table counttest(name char(1), age char(2));

Query OK, 0 rows affected (0.03 sec)

mysql> insert into counttest values

-> ('a', '14'),('a', '15'), ('a', '15'),

-> ('b', NULL), ('b', '16'),

-> ('c', '17'),

-> ('d', null),

->('e', '');

Query OK, 8 rows affected (0.01 sec)Records: 8  Duplicates: 0  Warnings: 0mysql> select * from counttest;

+------+------+| name | age  |

+------+------+

| a    | 14   || a    | 15   |

| a    | 15   || b    | NULL |

| b    | 16   || c    | 17   |

| d    | NULL || e    |      |

+------+------+

8 rows in set (0.00 sec)

mysql> select name, count(name), count(1), count(*), count(age), count(distinct(age))

-> from counttest

-> group by name;

+------+-------------+----------+----------+------------+----------------------+

| name | count(name) | count(1) | count(*) | count(age) | count(distinct(age)) |+------+-------------+----------+----------+------------+----------------------+| a    |           3 |        3 |        3 |          3 |                    2 |

| b    |           2 |        2 |        2 |          1 |                    1 || c    |           1 |        1 |        1 |          1 |                    1 |

| d    |           1 |        1 |        1 |          0 |                    0 || e    |           1 |        1 |        1 |          1 |                    1 |

+------+-------------+----------+----------+------------+----------------------+

5 rows in set (0.00 sec)

作者:芥末无疆sss

链接:https://www.jianshu.com/p/fe3ee73c0887

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

mysql count优化_MySQL count()函数及其优化相关推荐

  1. mysql和mybatis优化_MySQL + mybatis的SQL优化方案

    sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...

  2. mybatis与mysql调优_MySQL + mybatis的SQL优化方案

    sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...

  3. mysql推荐内存_mysql大内存高性能优化方案

    mysql优化是一个相对来说比较重要的事情了,特别像对mysql读写比较多的网站就显得非常重要了,下面我们来介绍mysql大内存高性能优化方案 8G内存下MySQL的优化 按照下面的设置试试看: ke ...

  4. mysql sql优化_MySQL数据库SQL语句优化原理专题(三)

    需求 做过开发的同学,对分页肯定不会陌生,因为很多前台页面展示,为了更好的展示数据,就会用到分页,所以如何写一个高性能的分页SQL语句,是每一个开发人员需要掌握的技能. 分页SQL 这里给大家写一个分 ...

  5. mysql的瓶颈_MySQL瓶颈分析与优化

    作者:蒋乐兴 简介 通过sysbench的oltp_read_write测试来模拟业务压力.以此来给指定的硬件环境配置一份比较合理的MySQL配置文件. 环境介绍 硬件配置 软件环境 优化层级与指导思 ...

  6. mysql find()方法_Mysql find_in_set()函数使用方法

    find_in_set()函数在mysql中是用来查找字类类型为SET()的内容查询的,下面我来给各位朋友简单的介绍介绍. 先看mysql手册中find_in_set函数的语法: 代码如下 复制代码 ...

  7. mysql相除_mysql 常用函数

    流程控制函数 CASE 函数 [写法-] CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result . ...

  8. mysql 昨天日期_MySQL 日期函数 今天明天昨天......

    MySQL 获得当前日期时间 函数 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | n ...

  9. split mysql的用法_mysql split函数用法实例

    首先,大家要知道的是,在mysql中并没有split函数,需要自己写. 比如下面几个mysql split函数的例子. 例1,获得按指定字符分割的字符串的个数: 复制代码 代码示例: DELIMITE ...

最新文章

  1. 【OpenCV】将单通道的Mat对象转换为三通道的Mat
  2. ensp删除静态路由命令_(温州大学)路由与交换机 期末试卷及解析
  3. 项目需求|室内场景三维空间重建项目
  4. javascript 错误与调试
  5. 数字图像处理实验(17):PROJECT 06-04,Color Image Segmentation
  6. Cocos2d-x VS. OGEngine,联盟与部落的战争
  7. t3修改计算机后就无法登录了,电脑更换系统后,用友T3登录不上了,一直显示这个,怎么处理,这个怎么解决...
  8. java后台解析json并保存到数据库_[Java教程]ajax 发送json 后台接收 遍历保存进数据库...
  9. 在sealos搭建的k8s集群中自定义kubeconfig文件
  10. vsftpd 虚拟用户详细配置
  11. 【读书笔记】金字塔原理-目录
  12. 开源BI工具对比(一):BI介绍
  13. 使用iOS AirPrint 让你的APP轻松实现打印功能
  14. 1、spring源码解析之概况流程
  15. 【沉浸式腾讯云服务器部署安装docker】
  16. 如何禁用笔记本触摸板
  17. 软件领域专利申请的特点及案例
  18. 工作以后,我们如何实现自我提升
  19. 非常好的Linux编译内核详解 - -
  20. rtx java_如何使用JAVAWEB集成RTX推送消息

热门文章

  1. python random函数_详细代码实战讲解:如何用 Python让自己变成天选之子
  2. python与javascript的区别_python与js区别有哪些
  3. win7电脑内存信息的查看方法
  4. 计算机系统存储器分类和总线分类
  5. 三诺+n20g+微型计算机,原来是他?揭秘三诺永恒系列开山鼻祖
  6. MySQL 排名函数.md
  7. Java8————Optional
  8. 小程序监听android返回键,如何监听小程序返回按钮事件?
  9. oracle 根据用户备份,Oracle基于用户的备份及恢复
  10. 五款救急的linux文件恢复软件,五款救急的Linux文件恢复软件