SQL中的三种count()函数
数据库的使用中,Count() 函数用于统计数据表的记录,返回匹配指定条件的行数。
三种Count() 函数 count(1)、count(*)、count(列名) 区别
1、 count(1)、count(*)
数据表的数据量很大时,对数据表作分析,使用 count(1) 比使用 count(*) 用时多。从执行计划看, count(1)、count(*)的效果是相同的,但实际 count(1)的执行用时相对较少(1w以内数据量)。如果count(1)是聚索引,id,那肯定是count(1)快,但是差的很小。因为 count(*) 会自动优化指定到某一个字段,所以没必要用count(1),用count(*) sql 会帮你完成优化,因此 count(1)和count(*)基本没有差别!
2、count(1)、 count(列名)
这两者的主要区别是:count(1) 统计的是数据表中的所有记录数,包含字段为 null 的记录;count(列名) 统计的是该字段在该表中出现的次数,会忽略字段为 null 的情况,不统计空记录。
3、count(1)、count(*)、count(列名)
在执行效果上:
- count(*)包括了所有的列,返回表格中所有存在的行的总数包括值为null的行;
- count(1)是用1代表代码行,在统计结果时,不会忽略列值为NULL ;
- count(列名)只包括指定列名的计数(有默认值的列也会被计入),在统计结果时,会忽略列值为空(这里的空不是指空字符串或者0,而是null)的计数,即某个字段值为NULL时,不统计。
在执行效率上:
- 列名为主键时,count(列名)会比count(1)快 ,count(1) 和 count(主键) 一样,只扫描主键;
- 列名不为主键时,count(1)会比count(列名)快 ;
- 如果表中有多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
- 如果有主键,则 select count(主键)的执行效率是最优的
- 如果表只有一个字段,则 select count(*)最优。
count(主键) 不一定比count(其余索引) 快:
索引是一种B+树的结构,以块为单位进行存储。假设块大小是1K,主键索引大小为4B,有一个字段A的索引大小为2B。 同样一个块,能存放256个主键索引,但是能存放512个字段A的索引。 假设总数据是2K条,意味着主键索引占用了8个块,而A字段索引占用了4个块,统计时用主键索引需要经历的块多,IO次数多,效率也比A字段索引慢。
Count() 函数总结
- (1) 如果在开发中确实需要用到count()聚合,那么优先考虑count(*),因为mysql数据库本身对于count(*)做了特别的优化处理。
- (2) 使用count()聚合函数后,最好不要跟where age = 1 这样的条件,会导致不走索引,降低查询效率,除非该字段已经建立了索引。使用count()聚合函数后,若有where条件,且where条件的字段未建立索引,则查询不会走索引,直接扫描了全表。
- (3) count(字段),非主键字段,这样的使用方式最好不要出现,因为它不会走索引。
SQL中的三种count()函数相关推荐
- SQL中的三种去重方法
在使用SQL提数的时候,常会遇到表内有重复值的时候,比如我们想得到 uv (独立访客),就需要做去重. 在 MySQL 中通常是使用 distinct 或 group by子句,但在支持窗口函数的 s ...
- SQL 中 Rank、row_number、dense_rank 三种排序函数的区别
现有一张工资表,需要对其进行排名,工资相同的人并列排名,然后再排名,很多刚接触的小伙伴估计第一时间想到Rank()函数或row_number() 函数,但是结果出来后并不是自己想要的,在这里就给大家介 ...
- pdo_fetch执行mysql_PDO中执行SQL语句的三种方法
在PDO中,我们可以使用三种方式来执行SQL语句,分别是 exec()方法,query方法,以及预处理语句prepare()和execute()方法~大理石构件来图加工 在上一篇文章<使用PDO ...
- oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念
Nested loop join:
Outer - phpStudy...
浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...
- 061 hive中的三种join与数据倾斜
一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...
- C#中的三种委托方式:Func委托,Action委托,Predicate委托
C#中的三种委托方式:Func委托,Action委托,Predicate委托. Func,Action,Predicate全面解析 首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如 ...
- SQL去重的三种方法汇总
SQL去重的三种方法汇总 这里的去重是指:查询的时候, 不显示重复,并不是删除表中的重复项 1.distinct去重 注意的点:distinct 只能一列去重,当distinct后跟大于1个参数时,他 ...
- Oracle的join默认为,Oracle中的三种Join方法详解
这里将为大家介绍Oracle中的三种Join方法,Nested loop join.Sort merge join和Hash join.整理出来以便帮助大家学习. 基本概念 Nested loop j ...
- MySQL buffer pool中的三种链
三种page.三种list.LRU控制调优 一.innodb buffer pool中的三种页 1.free page:从未用过的页 2.clean page:干净的页,数据页的数据和磁盘一致 3.d ...
最新文章
- Linux小工具(4)之apt软件管理
- 项目经理怎么运用思维导图
- C语言enum(枚举)、指针、函数指针
- thymeleaf th:if 案例
- Kubernetes与Docker基本概念与常用命令对照
- Python基础--环境配置、编码风格、基础概念、基本数据类型(1)
- 创建初始脚本工具mkscript.sh
- 开发者说:当垃圾箱有了智慧
- 公司安排员工扫地,引发员工不满,程序员:保洁阿姨都请不起?
- 前置递增运算符(JS)
- 当xshell关闭时如何保持一个jar包程序在后台运行
- 三个有用的SQL辅助工具
- python,文件md5校验
- Linux服务器安全加固
- 普通IO口红外线接收(不用外部中断)
- html5图片并列排版,图片并列排版实现
- ArcGIS切片生成工具-ArcGIS缓存管理
- linux rz 快捷上传包或文件
- vue百度地图 驾车路线修改路径颜色,每条路径颜色不一样
- 【BigHereo 37】---L10---C++真题之 代码填空
热门文章
- linux tee错误日志,linux tee命令使用详解教程
- TikTok魅力无限!对话Z世代,布局品牌未来
- android 注册两次广播,android 4.4 动态注册+静态注册电话短信广播后收到两次onReceive回调的问题...
- 亚马逊收款方式,需要考虑哪些因素?
- 【数据结构与算法】期末考试必考重点复习知识指示
- 关于使用msiexec弹出windows installer问题
- VS2017生成解决方案报错,提示对路径的访问被拒绝
- 进击的二叉树 | 心中有树
- 联合索引最左匹配原则
- jenkins pipeline的parameters参数介绍