count(1)、count(*)、count(列名) 详解
一、执行效果:
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 的记录。
转自:http://www.cnblogs.com/Dhouse/p/6734837.html
二、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(*)最优。
转自:http://eeeewwwqq.iteye.com/blog/1972576
实例分析
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)
额外参考资料:http://blog.csdn.net/lihuarongaini/article/details/68485838
count(1)、count(*)、count(列名) 详解相关推荐
- count()函数的详解
一.什么是count函数 1.COUNT() 函数返回匹配到指定条件的记录行数. 二.怎样使用 1.count(*)和count(1)它们的用法是一样的. 例如: 都是对于指定列不为null的行数. ...
- 围棋定式详解 v3.01 下载
Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...
- 在Mysql中count(*)、count(1)与count(字段/列名)的详解—聚合函数count
目录 一.简单区别 二.效率比较 三.举例 3.1创建表 3.1.1利用count(*)进行统计所有行的数目 3.1.2利用count(1)进行统计所有行的数目 3.1.3利用count(字段/列名) ...
- sql语句中count(*),count(1),count(id)区别详解
1.前言 相信大多数有一定经验的phper都碰到过这个问题,count(*)和count(1),以及count('id')列有什么区别呢,这三者到底有什么不同呢,今天我将为此做深层的剖析,各位猿友们, ...
- mysql group by having count_mysql中count(), group by, order by使用详解
最近做IM的时候遇到一个问题,同时用到了这三个关键字.就是查询一个人的离线消息详情,我们服务端返回给客户端显示的这个详情包括了三个内容,第一个要求列出离线这段时间哪些人或者群给你发了消息,第二个这其中 ...
- 二进制拆弹实验详解_Population Count算法-求二进制数中1的个数
所谓Population Count算法,即是指计算一个二进制数中1的个数的算法.具体来说,就是任意给定一个无符号整数N,求N的二进制表示中1的个数,比如N = 5(0101)时,返回2:N = 15 ...
- mysql 聚集函数 count 使用详解
mysql 聚集函数 count 使用详解 本文将探讨以下问题 1.count(*) . count(n).count(null)与count(fieldName) 2.distinct 与 coun ...
- python count函数代码_python count函数用法详解_后端开发
fgetc函数的作用详解_后端开发 fgetc函数的作用是从指定文件读入一个字符,要求文件的打开方式必须是以读或读写的方式或者追加的方 式,只写方式是不能读的. 在python中可以使用"c ...
- python中count的作用_python count函数用法详解
在python中可以使用"count()"函数统计字符串里某个字符出现的次数,该函数用于统计次数,其语法是"count(sub, start= 0,end=len(str ...
- mysql数据库中count的作用_详解 MySQL中count函数的正确使用方法
1. 描述 在MySQL中,当我们需要获取某张表中的总行数时,一般会选择使用下面的语句 select count(*) from table; 其实count函数中除了*还可以放其他参数,比如常数.主 ...
最新文章
- 知乎热议:科研界是如何保护自己的成果免于剽窃的?
- 转 awk 使用方法
- 如何在自定义数据源组件中限制用户的更改
- CentOS7.2基于LAMP搭建WordPress,并自定义Logo和名称
- Docker容器运行后退出,怎么才能一直运行?
- 【SDL】SDL学习笔记一 SDL的子系统的初始化和退出
- 《用户网络行为画像》读书笔记(一)
- 学数据结构,仅仅须要主要的编程体验
- vue 监听路由变化
- 小米MIX 4内部代号曝光:“众神之王”三季度降临
- MongoDB 安装与启动
- 数据结构与算法的分析 —— 平均时间复杂度 vs 分摊时间复杂度
- linux下dns视图配置
- spring异常处理器
- Vue3格式化Volar报错
- 褚时健 | 我这辈子最问心无愧的就是:没有庸庸碌碌地过完一生
- 数据分析之统计知识总结
- ubuntu 复制文件夹到另一目录命令
- python批量检索文献_基于Python的文献检索系统设计与实现
- Linux的bind服务