count(*),count(1)和count(field)区别
印象中,count(key)比count(*)效率要高,因此在项目中用了count(field)的形式来统计行数。在code reivew时被指出应用count(*),于是查了下,并做了下简单测试,果然是我记错了,足见code review是多么有用啊。
count(*)
count(*)是对不为null的行进行计数,因此某一行只要不是所有列都为null(即只要是存在的记录),就会被计数。
mysql用explain查看其执行计划,count(*)会尽量利用具有以下特征的索引来提高性能:
- not null列
- 字段较窄
如图所示,表主键id为bigint类型,count(*)时自动选择了int类型的gst_id索引。
count(field)
count(field)是对field列不为null的行进行统计,因此某一行的该列为null,则不予计数 。
同样用explain查看其执行计划,count(field)同样会尽量利用索引来提高性能,暂时发现有以下两种情况:
- 含有该field的索引
- 若改field为主键,则同count(*)一样,会选择更窄的索引,此时和使用count(*)无异
由此可见,用count(field)来进行统计会有以下问题:
- 若该field有null记录,意图用来统计所有记录时,结果是错误的
- 若该field没有索引或者不是最优索引,则效率会低
count(1)
还见到count(1)用法。mysql中验证没有发现与count(*)明显区别,暂且认为是一样的。
小结
count(*)和count(1)无太大差别,count(field)若使用不当会带来错误或性能问题,不建议使用。
另外,若含有where语句,则会优先where中条件索引,上面讨论的执行计划,应该没多大意义了。
count(*),count(1)和count(field)区别相关推荐
- Mysql之count(*),count(1),count(field)区别、性能差异
目录 前言 COUNT(*)与 COUNT(1) MyISAM引擎中的COUNT(*)与 COUNT(1) Innodb引擎中的COUNT(*)与 COUNT(1) 实验 原理 结论 Count(1) ...
- select count(*) from temp 与select count(1) from temp有什么区别
select count(*) from temp 与select count(1) from temp有什么区别 ----count(*)是整个表中有多少条记录,扫描的是整个表 ---- ----c ...
- select count(*) 和 select count(1) 以及 select count(column) 的区别
考试,目的在于让自己明白,自己天天写的都是垃圾 select count(*) 和 select count(1) 以及 select count(column) 的区别 1.如果表沒有主键, 那么c ...
- SQL难点对比分析:COUNT(IF) 和 SUM(IF)的区别
COUNT(IF) 和 SUM(IF) 的区别和联系: COUNT(IF xxx, 1, 0):无视条件求和,即统计0或者1的数量(因为不论0还是1,都是不为NULL的值) SUM(xxx, 1, 0 ...
- count(*)和count(1)和count(列名)的区别
count是一种最简单的聚合函数,一般也是我们第一个开始学习的聚合函数,那么他们之间究竟由什么区别呢? 有的人说count(1)和count(*)他们之间有区别,而有的人说他们之间没有区别那么他们之间 ...
- count(*),count(1),count(列)区别
执行效果: count(1) and count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了! 从执行计划来看,count(1)和count()的 ...
- count(*)、count(1)和count(列名)的区别
count(*).count(1)和count(列名)的区别 1.执行效果上: l count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL l count(1)包 ...
- sql count(1) count(*)区别_PostgreSQL的count(1)真的比count(*)快么?
作者简介 张连壮,多年PostgreSQL数据库内核研发经验,高可用/数据复制方面经验较为丰富,目前主要从事分布式数据库Citus相关工作,CitusDB中国[站主]专注于Citus技术分享的全信息平 ...
- 数据库面试题【十九、count(字段) count(主键 id) count(1)count(*)的区别】
count(可空字段) 扫描全表,读到server层,判断字段可空,拿出该字段所有值,判断每一个值是否为空,不为空则累加 count(非空字段)与count(主键 id) 扫描全表,读到server层 ...
最新文章
- 每日 30 秒之 对海量数据进行切割
- 在c语言中错误的常数表示是,C语言程序设计试题
- DCMTK:类DVPSIPCClient的示例消息服务器
- python os模块详细_python之os模块详解
- 树莓派使用STEP5:安装samba文件共享服务器
- windows客户端连接linux服务器上的postmaster
- 596. 超过5名学生的课
- Javaweb-标签介绍
- MATLAB —— polyfit()多项式曲线拟合(线性拟合/线性回归)
- 数学分析与高等代数考研真题详解--苏大卷
- Noip 2016 蛋碎一地晚节不保
- 感光度和灰阶测试—imatest
- 车辆出险保险索赔技巧——让每个车友都能学习
- Oracle新建的用户看不到表,oracle中用命令行新建的用户没法建表
- 已解决解决:consumer: Cannot connect to redis://localhost:6379//: Error 11001 connecting to localhost:6379
- Unity Shader - 羽化效果
- 凸函数的性质、判定,凸规划
- 基于PysimpleGUI+pymysql建立的简单管理系统(1)
- C#模拟百度登录并到指定网站评论回帖(三)
- 电子海图改正信息的计算和输入
热门文章
- AxureRP使用技巧
- android InputStream相关类
- 涨芝士:VScode如何在俩个窗口打开同一个项目(目录)
- 小米mix2s html,用小米MIX2S玩吃鸡?我劝你不要啦
- element 表格table纵横双列表头 斜线样式处理和多级表头循环
- ocm名单 oracle_OCM(Oracle认证数据库大师)
- xmake v2.6.2 发布,新增 Linux 内核驱动模块构建支持
- 解除游戏多开限制,关闭互斥体句柄
- 修改elementUI单选框默认值
- wmic csproduct 报错No Instance通过修复wmi解决