来源| blog.csdn.net/iFuMI/article/details/77920767

1. 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(*)基本没有差别!

2. count(1) and count(字段)

两者的主要区别是

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

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

3. 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(*)最优。

4. 实例分析

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)
- End -
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:(1)点击页面最上方“小詹学Python”,进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。

别傻了,你还认为 count(1) 比 count(*) 效率高?相关推荐

  1. 你还在认为 count(1) 比 count(*) 效率高?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源| blog.csdn.net/iFuMI/artic ...

  2. 一直认为 count(1) 比 count(*) 效果高,被同事鄙视了。

    今日推荐 腾讯二面:@Bean 与 @Component 用在同一个类上,会怎么样?比 Xshell 还好用的 SSH 客户端神器,MobaXterm 太爱了!SpringBoot 如何统计.监控 S ...

  3. mysql中count(*)和count(1)和count(column)区别

    在日常的mysql使用中,我们经常会看到SELECT COUNT(*).SELECT COUNT(1)等查询语句,他们到底有什么区别呢?今天我就来总结下. 我们先从函数的含义说起: count() 统 ...

  4. mysql count 1_高性能MySQL count(1)与count(*)的差别

    -------------------------------------------------------------------------------------------------第一篇 ...

  5. 【优化】COUNT(1)、COUNT(*)、COUNT(常量)、COUNT(主键)、COUNT(ROWID)、COUNT(非空列)、COUNT(允许为空列)、COUNT(DISTINCT 列名)

    [优化]COUNT(1).COUNT(*).COUNT(常量).COUNT(主键).COUNT(ROWID).COUNT(非空列).COUNT(允许为空列).COUNT(DISTINCT 列名) 1. ...

  6. count(列名)与count(*)、count(1)的区别

    count()函数的作用是用来计算指定列或整个表中的函数,count()函数有以下三种写法:count(列名) .count(1).count(*) . 其中,count(列名)只统计当前列中非空值的 ...

  7. count(*),count(1)和count(field)区别

    印象中,count(key)比count(*)效率要高,因此在项目中用了count(field)的形式来统计行数.在code reivew时被指出应用count(*),于是查了下,并做了下简单测试,果 ...

  8. 【Mysql学习笔记】count(1)、count(*)、count(id)和count(字段)

    reference1 reference2 count(1),表示扫描表,count(1)它在扫描到一行时不会取任何值,而是直接返回一个1,然后累加1的个数. count(),MyISAM引擎中直接在 ...

  9. MySql 执行count(1)、count(*) 与 count(列名) 区别

    MySql 执行count(1).count(*) 与 count(列名) 区别 1. 初识 count COUNT(expr) ,返回 SELECT 语句检索的行中 expr 的值不为NULL的数量 ...

最新文章

  1. 用requests获取网页源代码 python-Python3使用requests包抓取并保存网页源码的方法
  2. eclipse 的习惯配置
  3. java项目close wait_java – 排除连接卡在CLOSE_WAIT状态
  4. Crontab命令--Linux
  5. 李彦宏妻子马东敏向中国科大捐赠1亿 成立蔷薇基金
  6. 【转】Asp.net的生命周期应用之IHttpModule和IHttpHandler
  7. STM32项目(四)——暗室网关
  8. ERP软件的追加开发环节存在特殊价值
  9. EhCache缓存在web下的使用实例
  10. Ubuntu 11.04 下安装配置 JDK 7
  11. 哈夫曼编码(Huffman Coding)原理详解
  12. xsocks 64位平台下编译问题小记
  13. 深入理解android虚拟机
  14. 河南第十届ACM省赛-E-八纵八横
  15. IT内部控制体系建设方案-从IT角度解读《企业内部控制规范》
  16. IAR生成文件链接过程解析
  17. 开源框架XWIKI搭建介绍
  18. 矩阵求和 c语言 简单易懂
  19. 自动弹图片html,HTML图片预览弹出层实现
  20. dataframe一列拆分成多列

热门文章

  1. nginx 高并发配置参数(转载)
  2. 扩展thinkphp5的redis类方法
  3. 京东三级列表页持续架构优化—Golang+Lua(OpenResty)最佳实践
  4. nginx 如何实现读写限流的方法
  5. php性能分析工具XHProf安装配置使用教程(linux精华版)
  6. Git停止跟踪rm -r --cached与ignore区别
  7. Yii的各种render
  8. tp 查询3天内是否有记录_DNF:玩家哭诉没坐过飞机,被吧主实锤打脸,TP制裁强行背锅...
  9. 麒麟810处理器_华为nova5跑分公布,麒麟810到底是什么水平?
  10. 平面设计常用的图像文件格式