最新要闻
- 新一代“夜视神器”!佳能推出全球首款SPAD传感器相机
- 世界最资讯丨地球上将近一半人都在玩游戏!全球游戏受众已达37亿
- 全球实时:6年前的麒麟970如获新生 24款设备升级华为鸿蒙3系统
- 铝车身强度差?奇瑞小蚂蚁表示不服:托举30吨坦克
- 微速讯:徕卡CEO体验小米13 Ultra后打出满分:影像素质前所未有
- 全球消息!湖北构建全国劳动争议多元化解先行区
- 韩国面板巨头要卖掉中国LCD工厂?TCL否认接盘:消息不实
- 女子拒绝调岗降薪被辞退:离职证明上写着“简历造假” 当事人难就业
- 世界速递!一加Ace 2新增18GB内存 被指反向升级 高管解释:真没有
- 【世界新视野】国内5月上映 迪士尼《小美人鱼》新剧照公布:脏辫黑人鱼与王子对视
- 天天速看:首发1350元 铭凡UM560XT迷你主机上架:锐龙5 5600H、液金散热
- 【聚看点】非法捕捞水产品案进行生态补偿 三亚海警局组织增殖放流3000尾鱼苗
- 24层楼高!我国首艘大型邮轮将交付:2500万个零件
- 【天天聚看点】文案没能逃过因AI失业!蓝色光标回应AI取代文案外包:属实
- 全球最资讯丨车主曝极氪001自动加速撞车:官方承认失控、但不担责任
- 《生化危机:死亡岛》角色介绍:克莱尔、瑞贝卡、吉尔太美了
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
count(*) count(1) count(字段)效率问题
COUNT(字段名)和COUNT(*)的查询结果有什么不同?
【资料图】
COUNT(1)和COUNT(*)之间的效率哪个更高?
你知道答案吗?很多人都认为COUNT(1)比COUNT(*)效率高,真的是这样吗?
1、认识COUNT
关于COUNT函数,在MySQL官网中有详细介绍:
简单翻译一下:
1、COUNT(expr) ,返回SELECT语句检索的行中expr的值不为NULL的数量。结果是一个BIGINT值。
2、如果查询结果没有命中任何记录,则返回0
3、但是,值得注意的是,COUNT(*) 的统计结果中,会包含值为NULL的行数。
即以下表记录
create table #bla(id int,id2 int)insert #bla values(null,null)insert #bla values(1,null)insert #bla values(null,1)insert #bla values(1,null)insert #bla values(null,1)insert #bla values(1,null)insert #bla values(null,null)
使用语句count(*),count(id),count(id2)查询结果如下:
select count(*),count(id),count(id2)from #blaresults 7 3 2
除了COUNT(id)和COUNT(*)以外,还可以使用COUNT(常量)(如COUNT(1))来统计行数,那么这三条SQL语句有什么区别呢?到底哪种效率更高呢?为什么《阿里巴巴Java开发手册》中强制要求不让使用 COUNT(列名)或 COUNT(常量)来替代 COUNT(*)呢?
COUNT(列名)、COUNT(常量)和COUNT(*)之间的区别前面我们提到过COUNT(expr)用于做行数统计,统计的是expr不为NULL的行数,那么COUNT(列名)、 COUNT(常量) 和 COUNT(*)这三种语法中,expr分别是列名、 常量 和 *。
那么列名、 常量 和 *这三个条件中,常量 是一个固定值,肯定不为NULL。*可以理解为查询整行,所以肯定也不为NULL,那么就只有列名的查询结果有可能是NULL了。
所以, COUNT(常量) 和 COUNT(*)表示的是直接查询符合条件的数据库表的行数。而COUNT(列名)表示的是查询符合条件的列的值不为NULL的行数。
除了查询得到结果集有区别之外,COUNT(*)相比COUNT(常量) 和COUNT(列名)来讲,COUNT(*)是SQL92定义的标准统计行数的语法,因为他是标准语法,所以MySQL数据库对他进行过很多优化。
SQL92,是数据库的一个ANSI/ISO标准。它定义了一种语言(SQL)以及数据库的行为(事务、隔离级别等)。
COUNT(*)的优化前面提到了COUNT(*)是SQL92定义的标准统计行数的语法,所以MySQL数据库对他进行过很多优化。那么,具体都做过哪些事情呢?
这里的介绍要区分不同的执行引擎。MySQL中比较常用的执行引擎就是InnoDB和MyISAM。
MyISAM和InnoDB有很多区别,其中有一个关键的区别和我们接下来要介绍的COUNT(*)有关,那就是MyISAM不支持事务,MyISAM中的锁是表级锁;而InnoDB支持事务,并且支持行级锁。
因为MyISAM的锁是表级锁,所以同一张表上面的操作需要串行进行,所以,MyISAM做了一个简单的优化,那就是它可以把表的总行数单独记录下来,如果从一张表中使用COUNT(*)进行查询的时候,可以直接返回这个记录下来的数值就可以了,当然,前提是不能有where条件。
MyISAM之所以可以把表中的总行数记录下来供COUNT(*)查询使用,那是因为MyISAM数据库是表级锁,不会有并发的数据库行数修改,所以查询得到的行数是准确的。
但是,对于InnoDB来说,就不能做这种缓存操作了,因为InnoDB支持事务,其中大部分操作都是行级锁,所以可能表的行数可能会被并发修改,那么缓存记录下来的总行数就不准确了。
但是,InnoDB还是针对COUNT(*)语句做了些优化的。
在InnoDB中,使用COUNT(*)查询行数的时候,不可避免的要进行扫表了,那么,就可以在扫表过程中下功夫来优化效率了。
从MySQL 8.0.13开始,针对InnoDB的SELECT COUNT(*) FROM tbl_name语句,确实在扫表的过程中做了一些优化。前提是查询语句中不包含WHERE或GROUP BY等条件。
我们知道,COUNT(*)的目的只是为了统计总行数,所以,他根本不关心自己查到的具体值,所以,他如果能够在扫表的过程中,选择一个成本较低的索引进行的话,那就可以大大节省时间。
我们知道,InnoDB中索引分为聚簇索引(主键索引)和非聚簇索引(非主键索引),聚簇索引的叶子节点中保存的是整行记录,而非聚簇索引的叶子节点中保存的是该行记录的主键的值。
所以,相比之下,非聚簇索引要比聚簇索引小很多,所以MySQL会优先选择最小的非聚簇索引来扫表。所以,当我们建表的时候,除了主键索引以外,创建一个非主键索引还是有必要的。
至此,我们介绍完了MySQL数据库对于COUNT(*)的优化,这些优化的前提都是查询语句中不包含WHERE以及GROUP BY条件。
COUNT(*)和COUNT(1)介绍完了COUNT(*),接下来看看COUNT(1),对于,这二者到底有没有区别,网上的说法众说纷纭。
有的说COUNT(*)执行时会转换成COUNT(1),所以COUNT(1)少了转换步骤,所以更快。
还有的说,因为MySQL针对COUNT(*)做了特殊优化,所以COUNT(*)更快。
那么,到底哪种说法是对的呢?看下MySQL官方文档是怎么说的:
InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.
画重点:same way , no performance difference。所以,对于COUNT(1)和COUNT(*),MySQL的优化是完全一样的,根本不存在谁比谁快!
那既然COUNT(*)和COUNT(1)一样,建议用哪个呢?
建议使用COUNT(*)!因为这个是SQL92定义的标准统计行数的语法,而且本文只是基于MySQL做了分析,关于Oracle中的这个问题,也是众说纷纭的呢。
COUNT(字段)最后,就是我们一直还没提到的COUNT(字段),他的查询就比较简单粗暴了,就是进行全表扫描,然后判断指定字段的值是不是为NULL,不为NULL则累加。
相比COUNT(*),COUNT(字段)多了一个步骤就是判断所查询的字段是否为NULL,所以他的性能要比COUNT(*)慢。
总结本文介绍了COUNT函数的用法,主要用于统计表行数。主要用法有COUNT(*)、COUNT(字段)和COUNT(1)。
因为COUNT(*)是SQL92定义的标准统计行数的语法,所以MySQL对他进行了很多优化,MyISAM中会直接把表的总行数单独记录下来供COUNT(*)查询,而InnoDB则会在扫表的时候选择最小的索引来降低成本。当然,这些优化的前提都是没有进行where和group的条件查询。
在InnoDB中COUNT(*)和COUNT(1)实现上没有区别,而且效率一样,但是COUNT(字段)需要进行字段的非NULL判断,所以效率会低一些。
因为COUNT(*)是SQL92定义的标准统计行数的语法,并且效率高,所以请直接使用COUNT(*)查询表的行数!————————————————版权声明:本文为CSDN博主「yz_wlkj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/pyzfirst/article/details/108521334
关键词:
-
count(*) count(1) count(字段)效率问题
COUNT(字段名)和COUNT(*)的查询结果有什么不同?COUNT(1)和COUNT(*)之间的效率哪个更高?你知道答案吗?...
来源: -
每日看点!vivo全球商城:电商交易平台设计
小结:1、租户vivo全球商城:电商交易平台设计https: mp weixin qq com s YDPZi1D8EDtv-C72_LRs...
来源: count(*) count(1) count(字段)效率问题
java -- 二维数组
每日看点!vivo全球商城:电商交易平台设计
焦点速看:python中如何修改文件?
全球快看:js数组方法之数组变异方法
新一代“夜视神器”!佳能推出全球首款SPAD传感器相机
世界最资讯丨地球上将近一半人都在玩游戏!全球游戏受众已达37亿
全球实时:6年前的麒麟970如获新生 24款设备升级华为鸿蒙3系统
铝车身强度差?奇瑞小蚂蚁表示不服:托举30吨坦克
微速讯:徕卡CEO体验小米13 Ultra后打出满分:影像素质前所未有
全球消息!湖北构建全国劳动争议多元化解先行区
每日视讯:JdkProxy的进阶知识
全球快看点丨【Visual Leak Detector】Release 模式下使用 VLD
【环球聚看点】债市日报:4月12日
韩国面板巨头要卖掉中国LCD工厂?TCL否认接盘:消息不实
女子拒绝调岗降薪被辞退:离职证明上写着“简历造假” 当事人难就业
世界速递!一加Ace 2新增18GB内存 被指反向升级 高管解释:真没有
【世界新视野】国内5月上映 迪士尼《小美人鱼》新剧照公布:脏辫黑人鱼与王子对视
天天速看:首发1350元 铭凡UM560XT迷你主机上架:锐龙5 5600H、液金散热
【聚看点】非法捕捞水产品案进行生态补偿 三亚海警局组织增殖放流3000尾鱼苗
全球即时:最全的python正则使用
环球精选![翻译]ExecutionContext vs SynchronizationContext
24层楼高!我国首艘大型邮轮将交付:2500万个零件
【天天聚看点】文案没能逃过因AI失业!蓝色光标回应AI取代文案外包:属实
全球最资讯丨车主曝极氪001自动加速撞车:官方承认失控、但不担责任
《生化危机:死亡岛》角色介绍:克莱尔、瑞贝卡、吉尔太美了
播报:腾讯QQ邮箱关联邮箱帐号功能要没了!5月15日终止服务
王一鸣:重点激活服务消费,放松中高端商品和服务消费的限制性措施
天天最新:新人必看| 移动端“动态化”是什么意思?
guacamole免密登录,guacamole不通过登录界面登录,guacamole指定用户名免密登录
天天快看点丨图数据库驱动的基础设施运维实操
java 如何计算两个汉字的相似度?如何获得一个汉字的相似汉字?
全球讯息:PostgreSQL 备忘清单_开发速查表分享
当前热文:《CS:GO》价值百万库存玩家被封:只因给其他玩家留言
环球速读:华为智慧屏S3 Pro官宣:顶部配“AI慧眼”、超窄四边
比亚迪微型电动车海鸥内饰发布:看齐海豚、卖8万买不
环球快讯:豆瓣评分跌至6.4!成龙《龙马精神》票房艰难破亿
每日速讯:“小Mate 50 Pro”实锤!华为畅享60X正面揭晓:旗舰同款刘海屏
环球今头条!4月15日 厦门邮轮母港公交场站正式启用(附公交调整方案)
环球消息!2023 年十大 API 管理趋势
新资讯:如何打开 plist 文件
每日短讯:Three.js教程:第一个3D场景
【天天时快讯】pymysql操作数据库入门
快看点丨高数上复习
辽宁发行150亿元专项债补充盛京银行资本金
【环球聚看点】《信托大家谈——信托业转型发展对大众意味着什么》
观点数字化大会 | 德信集团胡一平:一定要积极拥抱数字化改革
世界关注:非会员看剧遇3000多秒广告 优酷回应:确实会有 属极个别情况
世界今日讯!小米长焦之王!13 Ultra塞进两颗长焦镜头
专家称北京打车太便宜应涨价 崔东树曾任汽车销售
环球快看:女子疯狂网上购物确诊帕金森:过度伤害性冲动行为
世界最资讯丨自研大模型图片生成被质疑 商汤回应:秒画也有第三方开源模型
关于数智融合,看看这20位专家都聊了什么
热文:在.NET Core使用 HttpClient 的正确方式
看!前端新人如何用ChatGPT开发APP
JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用
当前速读:智能指针基本原理,简单实现,常见问题
今日热门!叶一茜当众骂森碟“心机”,她就这么恨女儿?
【新华500】新华500指数(989001)12日窄幅震荡跌0.10%
沙尘跨过长江一路向南!直击江皖沪多地沙尘现场
要闻:GT Neo5 SE 1TB版只卖2599 真我喊话:现货才是硬道理
RTX 4070今晚发布 结果遭AMD背刺了:显存越大越好、4K至少16GB
全球头条:史上最挤”五一档来了!王一博《长空之王》等17部影片扎堆上映
网传明年中旬上海绿牌蓝牌要合并?官方回应来了
当前速读:梯田为“布” 光影为“沙” 点亮乡村“夜经济”
世界热消息:C#使用Elasticsearch入门
plist文件格式转换器
观速讯丨T-SQL基础教程Day1
天天微头条丨云图说|云数据库GaussDB如何做到卓越性能
环球最资讯丨不怕有味儿 比毛巾划算:云南白药洗脸巾0.06元/张狂促
天天热点评!“回锅沙”要来了!部分地方要注意
全球短讯!果粉最期待的大屏MacBook Air来了!苹果史上第一款
世界视点!首款骁龙8+平板中兴Axon Pad来了:12.1寸超大屏
新动态:4月14日State of Play:将展示超20分钟《最终幻想16》
全球看热讯:电商平台商品详情接口的应用场景
热点!二级指针创建二叉树节点与一级指针创建二叉树节点
身体很诚实!马斯克加入AIGC大战:抢购1万张GPU、挖Deepmind墙角
当前视讯!曾被誉为最靠谱!又一家造车新势力发不出工资了
全球微速讯:火山引擎 DataLeap 推出全链路智能监控报警平台
有病了还能买哪种保险?隐瞒健康告知带病投保会怎么样?
理想汽车全系车型电器真实功率再公开:空调果然是耗电大户!
小米13 Ultra样张首亮相:虚化堪比单反 夜拍效果惊人
《龙之家族》新季开拍
罕见超级激励!东方甄选奖励154员工8.83亿港元
【世界独家】00后网红骑摩托车遇车祸身亡 劝不住:网友感慨年轻 有必要全面禁摩?
易基因:METTL3介导的m6A甲基化谱调控肌肉干细胞成肌细胞状态转换|发育分化
全球快资讯丨中骏集团称已备好即将到期美元债兑付资金 拟发行第二支中债增全额担保中票
3月物价数据透露哪些经济变化?促消费政策获得较大空间
天天报道:iPhone 15 Pro颠覆式设计取消了!郭明錤:苹果因技术问题放弃固态按键
丫丫将通过温控卡车运至机场:即将飞赴上海
又有新品牌了!长安启源A07亮相:颜值超高碾压一众国产
报道:推特突然“死亡”!马斯克正式启动打造美版微信
走过别错过!红蜻蜓126款休闲鞋/运动鞋/皮鞋清仓:79元绝世好价
h3c路由器如何恢复出厂设置?h3c路由器配置命令大全
小米手机卡顿反应慢是什么原因?小米手机卡顿反应慢怎么解决?
ssd极速固态硬盘怎么样?ssd极速固态硬盘排名前十
iphone4的显示屏分辨率是多少?iphone4版本太低怎么下载软件?
AMD速龙QL64CPU性能怎么样?amd速龙系列cpu天梯图
Zabbix“专家坐诊”第187期问答汇总
每日报道:数据开发提效有秘诀!离线开发BatchWorks 六大典型场景拆解