别傻了,你还认为 count(1) 比 count(*) 效率高?
来源| 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(*) 效率高?相关推荐
- 你还在认为 count(1) 比 count(*) 效率高?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源| blog.csdn.net/iFuMI/artic ...
- 一直认为 count(1) 比 count(*) 效果高,被同事鄙视了。
今日推荐 腾讯二面:@Bean 与 @Component 用在同一个类上,会怎么样?比 Xshell 还好用的 SSH 客户端神器,MobaXterm 太爱了!SpringBoot 如何统计.监控 S ...
- mysql中count(*)和count(1)和count(column)区别
在日常的mysql使用中,我们经常会看到SELECT COUNT(*).SELECT COUNT(1)等查询语句,他们到底有什么区别呢?今天我就来总结下. 我们先从函数的含义说起: count() 统 ...
- mysql count 1_高性能MySQL count(1)与count(*)的差别
-------------------------------------------------------------------------------------------------第一篇 ...
- 【优化】COUNT(1)、COUNT(*)、COUNT(常量)、COUNT(主键)、COUNT(ROWID)、COUNT(非空列)、COUNT(允许为空列)、COUNT(DISTINCT 列名)
[优化]COUNT(1).COUNT(*).COUNT(常量).COUNT(主键).COUNT(ROWID).COUNT(非空列).COUNT(允许为空列).COUNT(DISTINCT 列名) 1. ...
- count(列名)与count(*)、count(1)的区别
count()函数的作用是用来计算指定列或整个表中的函数,count()函数有以下三种写法:count(列名) .count(1).count(*) . 其中,count(列名)只统计当前列中非空值的 ...
- count(*),count(1)和count(field)区别
印象中,count(key)比count(*)效率要高,因此在项目中用了count(field)的形式来统计行数.在code reivew时被指出应用count(*),于是查了下,并做了下简单测试,果 ...
- 【Mysql学习笔记】count(1)、count(*)、count(id)和count(字段)
reference1 reference2 count(1),表示扫描表,count(1)它在扫描到一行时不会取任何值,而是直接返回一个1,然后累加1的个数. count(),MyISAM引擎中直接在 ...
- MySql 执行count(1)、count(*) 与 count(列名) 区别
MySql 执行count(1).count(*) 与 count(列名) 区别 1. 初识 count COUNT(expr) ,返回 SELECT 语句检索的行中 expr 的值不为NULL的数量 ...
最新文章
- 用requests获取网页源代码 python-Python3使用requests包抓取并保存网页源码的方法
- eclipse 的习惯配置
- java项目close wait_java – 排除连接卡在CLOSE_WAIT状态
- Crontab命令--Linux
- 李彦宏妻子马东敏向中国科大捐赠1亿 成立蔷薇基金
- 【转】Asp.net的生命周期应用之IHttpModule和IHttpHandler
- STM32项目(四)——暗室网关
- ERP软件的追加开发环节存在特殊价值
- EhCache缓存在web下的使用实例
- Ubuntu 11.04 下安装配置 JDK 7
- 哈夫曼编码(Huffman Coding)原理详解
- xsocks 64位平台下编译问题小记
- 深入理解android虚拟机
- 河南第十届ACM省赛-E-八纵八横
- IT内部控制体系建设方案-从IT角度解读《企业内部控制规范》
- IAR生成文件链接过程解析
- 开源框架XWIKI搭建介绍
- 矩阵求和 c语言 简单易懂
- 自动弹图片html,HTML图片预览弹出层实现
- dataframe一列拆分成多列
热门文章
- nginx 高并发配置参数(转载)
- 扩展thinkphp5的redis类方法
- 京东三级列表页持续架构优化—Golang+Lua(OpenResty)最佳实践
- nginx 如何实现读写限流的方法
- php性能分析工具XHProf安装配置使用教程(linux精华版)
- Git停止跟踪rm -r --cached与ignore区别
- Yii的各种render
- tp 查询3天内是否有记录_DNF:玩家哭诉没坐过飞机,被吧主实锤打脸,TP制裁强行背锅...
- 麒麟810处理器_华为nova5跑分公布,麒麟810到底是什么水平?
- 平面设计常用的图像文件格式