范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

面试官mysql中count()和count(1)哪个效率高?

  公司来了一位架构师,看我用count(*)统计数据总数。
  对我说,你怎么用count(*)统计数据,count(*)太慢了,要是把数据库搞垮了怎么搞,
  用count(1)。吓得我赶紧换成了count(1)。
  count(1) 性能就比count(*)高吗?
  记得有次面试时,面试官也问我类似这样的问题,mysql统计数据总数count(*)和count(1)哪个效率高?
  今天来聊一聊count(1)和count(*)效率问题。不同存储引擎的性能不一样
  我们不知道,Mysql常见的存储引擎有两种,MyISAM和Innodb,
  在这两种存储引擎下,MySQL对于使用count(*)返回结果的流程是不一样的。在MyISAM引擎中,每张表的总行数是存储在磁盘上,所以当执行count(*)时,是直接从磁盘拿到这个值返回,能够快速返回。但要是在后面加了where查询条件时,统计总数也不是像想象中那么快了。在Innodb引擎中,执行count(*),需要将数据一行一行地读,再统计总数。
  看到这里,不知道你有没有这样的疑问:
  为什么Innodb引擎不像MyISAM引擎一样把表总记录存储起来呢?
  这个问题问得好,回答这个问题前,我们先了解下MVCC,
  什么是MVCC
  全称:Multi-Version Concurrency Control 即多版本并发控制,MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存。
  MVCC 在 MySQL InnoDB 中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。
  就是因为要实现多版本并发控制,所以才导致Innodb不能直接存储表总记录数。
  因为每个事务获取到的一致性视图都是不一样的,所以返回的数据总记录也是不一致的。
  举个例子说明下:
  假如有一张用户表tb_user, 有三处正在查询用户的总数。select count(*) from tb_user
  这时候每次查到的用户数总数可能不太一样。
  这是因为每个用户会根据read view存储的数据来判断哪些数据是自己可见的,哪些是不可见的。read view
  当执行SQL语句查询时会产生一致性视图,即read-view,它是由查询的那一刻所有未提交事务ID组成的数组,和已经创建的最大事务ID组成的。
  在这个数组中最小的事务ID被称之为min_id,
  最大事务ID被称之为max_id,
  而查询的数据结果就是根据read-view做对比从而得到快照。
  于是就产生了以下的对比规则,这个规则就是使用当前的记录的trx_id跟read-view进行对比,规则如下:
  如果落在trx_idmax_id,表示该版本是由将来启动的事务生成的,是不可见的如果落在trx_id 在min_id 和max_id 中间(min_id<=trx_id<=max_id)时
  要是row的trx_id在数组中,表示该版本是由还没提交的事务生成的,不可见,但是当前自己的事务是可见的;
  要是row的trx_id不在数组中,表明是提交的事务生成了该版本,是可见的。
  读到这,相信你已经知道Innodb引擎为什么不像MyISAM引擎一样把表总记录存储起来了吧。因为 InnoDB 支持事务,MyISAM不支持事务。
  在执行count(*)操作的时候还是做了优化的。mysql对count(*)做了优化
  InnoDB是索引组织表,主键索引树的叶子节点是数据,而普通索引树的叶子节点是主键值。所以,普通索引树比主键索引树小很多。对于count(*)这样的操作,遍历哪个索引树得到的结果逻辑上都是一样的。因此,MySQL优化器会找到最小的那棵树来遍历。
  如果你使用过show table status 命令的话,就会发现这个命令的输出结果里面也有一个rows值用于显示这个表当前有多少行。
  那么是不是这个rows值就能代替count(*)了吗?
  其实不能,rows这个是从从采样估算得来的,因此它也是不是准确。不准确到什么程度,官方文档说是在40%到50%。所以show table status命令显示的行数rows是不能直接使用。
  基于MySQL的Innodb存储引擎,统计表的总记录数下面这4种做法,哪种效率最高?
  实践案例,准备了一张有 500W多条数据的表,表结构如下:
  CREATE TABLE `tb_user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL , `user_name` varchar(100) DEFAULT NULL , PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `userId` (`user_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4
  可以看到,这张表有一个主键索引,用不同方式来查询该表用户记录总数count(主键id)
  用select count(*) from tb_user 耗时0.739s
  InnoDB引擎会遍历整张表,把每一行的id值都取出来,返回给server层。server层拿到id后,判断是不可能为空的,就按行累加。count(1)
  用select count(1) from tb_user 耗时0.753s
  同样遍历整张表,但不取值,server层对返回的每一行,放一个数字1进去,判断是不可能为空的,按行累加。count(字段)
  用select count(user_name) from tb_user 耗时1.436s
  分为两种情况,字段定义为not null和null为not null时:逐行从记录里面读出这个字段,判断不能为null,累加为 null时:执行时,判断到有可能是null,还要把值取出来再判断一下,不是null才累加
  count(*)
  用select count(*) from tb_user 耗时0.739s
  需要注意的是,并不是带了*就把所有值取出来,而是mysql做了专门的优化,count(*)肯定不是null,按行累加。
  从上面的执行结果,得知count(字段)
豆瓣9。4,年度剧王预定阜新声艺视听很少能看见这样的国产剧。开分9。1,放在近几年来,已然属于精品行列。然而过了没几天,一看评分,人傻了。直接飙到豆瓣9。4了。到底是怎样的一部国产剧,能这么厉害?今天,必须得来聊一聊他承包了半个中国的电影主题曲,至死都是潇洒哥赵英俊去世当微博上出现这样一则热搜时,条姐和所有人一样,心情都是恍惚的。这个噩耗,来得太突然了,简直让人难以置信。消息传出之后,赵英俊是潇洒哥的微博发出了他留给这个世界的最后一篇小家乐福中国曾经的零售之王走上资本运作之路近日,彭博新闻社援引不愿具名的知情人士称,苏宁易购正考虑出售其所持有的家乐福中国控股股权,已经联系潜在买家,通过此次减持,苏宁易购寻求筹资约7亿至8亿美元。前段时间,家乐福刚刚与盒逆境中的华为,依然站得很直2020年华为总体经营收入8914亿元人民币,同比增长3。8。2020年华为净利润646亿元人民币,2019年全年627亿元人民币,同比增长3。2。财务副部长史延丽女士解释,华为不麦克风如何控制底噪?阜新声艺视听收音相关的技巧或经验其实讲也讲不完,但有些人买了极高级的收音设备,却连声音的基本常识都不足,昂贵设备真的加了分吗?常有人来说,他买了很厉害的麦,却发现噪音大,用过相同设备的我不禁怀关于音响的5个观点阜新声艺视听观点1声音的喜好是很个人的,自己喜欢最重要。像小编不喜欢太多残响回声,虽然那样会有空间感,但声音却混在一起了,相比之下我更喜欢音乐厅的感觉,有氛围又不会太吵。就像小编觉得自家的音响无线麦克风使用过程中的常见问题及解决方法阜新声艺视听随着时代的发展,无线麦克风被越来越多的人所青睐。正是由于无线麦克风使用起来方便轻巧,很多人用它唱歌演讲开会直播但它的使用性能经常因为周围设备频率的干扰用户的错误操作等各方面因素的影无线话筒使用的这些问题如何排除?阜新声艺视听在现场扩声活动中,同时使用几十套无线话筒对于如今的演出市场已不是什么新鲜事了。但是越来越复杂的现场无线电环境为我们同时使用多个通道的无线话筒带来了不少问题。这些问题,不论出于什么原游戏玩家们的影音设备选购杂谈(连载3)阜新声艺视听支持HDMI2。1标准将成为刚需和标配而小蛮之所以会换掉家中原本那台1080p的电视,选择目前这台4K电视,也是看中了它为次时代宣发,并支持HDMI2。1标准。2017年11月,H要怎么不烧掉你的音箱!?浅谈阻抗匹配先承认这张照片有点太夸张了,而且喇叭的部位其实不会烧起来。但是当讯号经过后级放大成高电流时,若是作为负载的箱体(Cabinet,本文将以CAB简称)和音箱头的阻抗没有匹配的话,轻微日常生活中常见的噪声,都有多少分贝?阜新声艺视听什么是分贝?这世界上最起码有一半乃至一半以上的人都对这个词一知半解。其实很多人都知道分贝就是个单位,虽然只是一个单位,但是和米秒摄氏度等物理量并不相同,它并不是一个直接描述声音强度
夏季小客厅这样装,清爽又宽敞到了夏季,面对着闷热的天气,人们简直是无处躲藏,尤其是小客厅,本来空间就小,要是布置不得当,那更会让人热得透不过气来,难受难受真难受那么小客厅应该如何来装,才能让空间变大又凉爽呢?儿童房营造夏季缤纷,充满清凉感与童真夏季的气温一天比一天高,真是热得让人喘不过气来,大多数人都会选择躲在家里来避暑。对于孩子们来说也经常会藏在自己的房间里不肯出来。这时的家长们有点担心啦!孩子们的房间是不是很凉爽,他游戏手机是否值得购买?安卓旗舰手机和游戏手机你会怎么选游戏手机值不值得购买,主要看自己的真实需求。如果你是重度游戏玩家,每天玩游戏至少在3个小时以上,那买黑鲨红魔ROG什么的游戏定位电竞手机未尝不可。不过这些手机相比普通手机的最大差别为什么你脸部皮肤还不如屁股?脸不如手的壹读君米吱照照镜子,第n次对着自己的脸叹气。各种水乳各种霜,还有洗面奶磨砂膏精粹水,一整套护肤程序下来起码半个小时,然而色斑一颗没少,鼻子毛孔大得能插秧,偶尔闭口洒满脑门情商高的人都在利用这些提升自己生同一个基本事实的两面,二者不可分割。人越缺什么,越炫耀什么,恐怕人们瞧不起他,实际上他越喜欢炫耀自己的优越性,内心越是自卑的。他想通过自己的炫耀让他人尊重他,甚至有的人用自己的炫147年老字号放大招,用灵芝做眼霜,眼纹真的淡了灵芝赋活紧致眼霜30g今天一条生活馆给大家分享一款眼霜灵芝赋活紧致眼霜,来自百年老字号品牌胡庆余堂。它含有珍贵的灵芝精华,营养活性浓度非常高,能够帮助改善眼周肌肤状况。胡庆余堂创立懒人我劝你别买小家电,怕你戒不掉近日,如果你有空气炸锅登上微博热搜,引发1。8亿阅读,8万讨论。你一边在评论区大呼我可以,一边狂搜空气炸锅型号。第二天一早,京东小哥端着空气炸锅敲开你家大门,你愣了一下,以为是刚点东北大爷大妈找对象,可比年轻人带劲多了爱看别人找对象的壹读君宁七再见爱人之后,我只承认它是国内恋综顶流。最近,一档吉林卫视的老年相亲综艺剪辑片段,占领了年轻人的短视频平台。看过这部老年人相亲节目的观众给出了上述的评价。旁观者眼中的恒大兑付方案9月13日,针对恒大投资理财产品兑付的困境,恒大提出了三种兑付方案。如果从旁观者的角度来看,这三种方案对于投资恒大理财产品的投资人来说依然存在很多的不确定因素和一定收益的损失。一现兰蔻赫莲娜希思黎你想不到的超低价,这里都有一年一度的11。11来了!很多人早就拿好了小本本,等着计算各种优惠活动。别着急!小编已经帮你做好功课啦,必囤必买的护肤好物都在这篇里。兰蔻粉水SISLEY全能乳液赫莲娜活颜修护舒缓如何尽量避免闲鱼上被挖坑现在网上二手交易平台的网站很多,最知名的莫过于闲鱼转转等,我最常使用的是咸鱼也曾经差点在上面被骗,希望我的经历可以让大家避免在闲鱼上受骗。那次差点上当的经历记忆犹新,第一次计划使用