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

每个开发人员都应该知道的Count()Count(1)和Count(id)的区别

  1.网上一些文章的总结count(*) :它会获取所有行的数据,不做任何处理,行数+1。  count(1):它会获取所有行的数据,每行固定值1,也是行数+1。  count(id):id代表主键,它需要从所有行的数据中解析出id字段,其中id肯定都不为NULL,行数+1。  count(普通索引列):它需要从所有行的数据中解析出普通索引列,然后判断是否为NULL,如果不是NULL,则行数+1。  count(未加索引列):它会全表扫描获取所有数据,解析中未加索引列,然后判断是否为NULL,如果不是NULL,则行数+1。
  由此,最后count的性能从高到低是:
  count(*) ≈ count(1) > count(id) > count(普通索引列) > count(未加索引列)
  以上结论错误至极,根本没有得到验证。
  下面我将基于 MySQL 5.7 + InnoDB引擎进行总结分析。 2.分析
  下面是一张数据量为100万的表,表中字段比较短,整体数据量不大。 CREATE TABLE `hospital_statistics_data` (   `pk_id` bigint unsigned NOT NULL AUTO_INCREMENT,   `id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL,   `hospital_code` varchar(36) COLLATE utf8mb4_general_ci NOT NULL,   `biz_type` tinyint NOT NULL,   `item_code` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,   `item_name` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,   `item_value` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL,   `is_deleted` tinyint DEFAULT NULL,   PRIMARY KEY (`pk_id`) ) DEFAULT CHARSET=utf8mb4;
  下面我会通过不同的 索引情况来看 count(*) 的执行计划。 2.1 只有一个聚簇索引EXPLAIN select COUNT(*) from hospital_statistics_data;  type: index key: PRIMARY key_len: 8
  count(*)   会遍历索引,并使用 聚集索引。2.2 存在非聚集索引(二级索引)
  hospital_code  向表中添加索引。 alter table hospital_statistics_data add index idx_hospital_code(hospital_code)
  此时表中有2个索引  primary key  , hospital_code  。 EXPLAIN select COUNT(*) from hospital_statistics_data;  type: index key: idx_hospital_code key_len: 146
  索引变为刚刚添加的  idx_hospital_code 。  2.3 有两个非聚集索引(二级索引)
  再添加一个二级索引。alter table hospital_statistics_data add index idx_biz_type(biz_type);
  此时表中有3个索引  primary key  、 hospital_code  、 biz_type  。 EXPLAIN select COUNT(*) from hospital_statistics_data;  type: index key: idx_biz_type key_len: 1
  现在索引变成是 biz_type  ,是不是很神奇。 2.4 基于以上三个索引,分别来看 count(1), count(id), count(index), count(no index)
  这四个的执行计划和 count(*) 有什么区别?
  count(1) EXPLAIN select COUNT(1) from hospital_statistics_data;  type: index key: idx_biz_type key_len: 1
  count(pk_id) EXPLAIN select COUNT(pk_id) from hospital_statistics_data;  type: index key: idx_biz_type key_len: 1
  count(index) EXPLAIN select COUNT(biz_type) from hospital_statistics_data;  type: index key: idx_biz_type key_len: 1
  count (no index) EXPLAIN select COUNT(item_code) from hospital_statistics_data;  type: ALL key: null key_len: null2.5 总结count(index)  将使用当前索引指定的索引。 count(no index)  是没有索引的全表扫描。 count(1), count(*), count(id) 也会选择  idx_biz_type   索引。 三、知识点
  MySQL分为服务层和引擎层。
  所有的SQL在执行前都会经过服务层的优化。优化有很多种,可以简单分为成本和规则优化。
  执行计划反映了SQL优化后服务层可能的执行过程。在大多数情况下,执行计划是可信的(不绝对,以防有人说我只看执行计划过于片面)。
  索引类型分为聚集索引和非聚集索引(二级索引)。其中,数据挂在聚簇索引上,非聚簇索引只是记录的主键id。
  抛开数据内存不谈,只谈数据量是扯淡。什么500万是极限,什么超过2个表需要优化join,什么是null就不会去索引等等,都是错误的。
  原因分析
  原因很简单。如上所述,服务层将根据成本进行优化。而且,一般情况下,非聚簇索引占用的内存要比聚簇索引小很多。
  问题讨论 3.1 如果你是 MySQL 开发者,你会在执行 count(*) 查询时使用哪个索引?
  我相信普通人使用非聚集索引。 3.2 如果有2个或多个非聚集索引如何选择?
  那么一定要选择占用内存最小的。同样是非聚集索引, idx_hospital_code   长度为146字节,而  idx_biz_type   长度仅为1。 3.3 那为什么count(*)取了index之后还是很慢?
  这里要明确一点,索引只是提高效率的一种方式,并不能完全解决效率问题。 count(*)  有一个明显的缺陷,就是需要计算总数,也就是遍历所有符合条件的数据,相当于一个计数器。当数据量足够大时,即使使用非聚集索引,也不能优化太多。
  官方文档:
  InnoDB 以相同的方式处理 SELECT COUNT(*) 和 SELECT COUNT(1) 操作。没有性能差异。
  简单的说,InnoDB下的  count(*)   相当于  count(1)  。 3.4 既然会自动取索引,那上面所谓的快速排序还觉得对吗?
  count(*)   的性能与数据量有很大关系。此外,二级索引的字段长度越短越好。
  另外,网上提到的索引故障大多是片面的,这里只说一点。量变可以导致质变。索引失效取决于你划定数据的范围。
  如果筛选的数据量占整体数据量的比例过高,就会放弃使用索引,否则,就会优先使用索引。但是这个规则并不完美,有时候可能和你预想的不一样。也可以使用一些技巧强制使用索引,但这种方法很少用到。
  例如:
  通过上表 hospital_statistics_data  ,做如下查询: select * from hospital_statistics_data where hospital_code is  not  null ;
  这个SQL  hospital_code   这个时候会用到索引吗?
  如果 hospital_code  只有一小部分数据是null,那么不会使用索引,否则会使用索引。
  就像买橘子一样。如果只买2斤,挑篮子里好的就可以了。但是如果你要买一筐,相信老板不会让你一个一个挑,而是一次给你一整筐。当然,大家也不傻,谁都知道篮子里肯定有几个坏果子。但这样对老板来说效率最高,成本也最低。

大家好,绝地求生刺激战场中哪键是多余的,哪些键可以简化?对于一块手机屏幕来说,刺激战场的按键其实有点多。按键设置小点,看似排放合理好用,实际用起来却太小不实用。按键设置大点,却又感觉拥挤操控空间小。这个时候排除多余的按键,合理设置按键位为啥现在吹华为手机的这么多呢?为啥黑华为的这么多呢我自己儿子不吹,难道吹你儿子多厉害??他再厉害他也不给我养老啊何况,我儿子也不差啊还用吹吗?思考mate20正常使用,已经升级鸿蒙,一个月不关机没卡顿mate9老人不方便出门,家人可以代购助听器吗?我母亲今年八十八岁了,自七十多岁就听为太差,从那年开始我就已买助听器给她用了,至今一直是我买给他用,一只助听器品牌是西门子三百多钱,大概一年一只,很容易坏,也有二百多钱的,听习惯了找工作是工资重要还是五险一金重要?判断哪个更重要是要根据自己当时所处的境况来看。虽然两个都重要,但妞姐认为,工资比五险一金相对重要,不是绝对重要。当你久久没有找到工作,钱也所剩无几,家里等米开锅的时候,这时有一份没建筑工地上高龄农民工即将消失!该怎么办?建筑工地上高龄农民工即将消失!首先,要清楚农民工在建筑工地上的职业特性。农民工在建筑行业的工作,无非就是从事泥瓦工木工和钢筋工等重体力劳动,从事其他的比如工程监理工程预算项目管理等你会开车吗?女人不会开车是不是很笨?如果比开车最笨,那当属我老婆了,别人都得靠边站,气的我牙根子都疼,驾校退了一次费,换了一个驾校。2016年,我们结婚之前,我给她报的驾校,让她去学车,当初是2800块钱不包票,372019款东风本田CRV机油乳化增多解决了吗?值得购买吗?2019年315晚会临近,汽车行业中各种质量问题不道德不负责任的行为,在这段时间都会被持续曝光以及放大,今年315晚会的预警其实早就已经开始来到了。随着汽车行业细分领域的开展,今年腌萝卜的方法?农村的腌萝卜怎么做,腌萝卜首先要挑选新鲜的萝卜,萝卜洗干净切丝晾一下,加入各种调料,放在容器里,密封好腌制就可以了,腌制好的萝卜爽口下饭,我就非常喜欢吃妈妈做腌萝卜,什么时候都吃不你的父母或者你的家人做过的最好吃的一道菜是什么?谢谢邀请,我觉得我妈做的每道菜都好吃。我妈做饭是出了名的好吃,不管是各类坛子菜(泡菜豆瓣酱盐菜豆豉鱼酸菜腌豆角咸菜腌土豆丝咸菜腌萝卜干等等)还是一些家常菜,还是蒸包子烙饼,都好吃,vivoX70Pro上手体验,能否颠覆你对vivoX系列的认知?确实很颠覆认知,从来没用过这么垃圾的手机。做一部5000的手机,居然可以做到日常操作卡顿掉帧,信号断流比呼吸都自然,去商场扫行程码,我居然被这破网坑的在外面站了10分钟,出停车场扫你觉得头条有多少未成年在使用?谢邀!很高兴!昨日的答题再被平台推至首页!非常感谢!头条是我们大家十分喜爱的一个媒体平台,主要发表国际国内时政新闻的题材。据我观察,使用者尤以中老年为主,年青人也占一定的比例。因为
中国标准菜刀卖到1700元?保时捷回应可以拍蒜文麻辣新语吴能恩近日,保时捷设计在官网上架一款连刀柄部分都是不锈钢的一体式中国菜刀,售价2这款名为P22中国刀的商品销售价格为240美元,人民币约1700元。保时捷设计在菜刀描述中重塑产城空间再造转型动力今年9月,中山市小榄镇九洲基广成路工改项目建设现场。南方日报记者叶志文摄今年1月,中山市小榄镇九洲基广成路工改项目集中拆除现场。南方日报记者叶志文摄神湾镇诚艺外沙科创城工改指挥部与欧冠巴塞罗那VS国际米兰巴萨背水一战!国米渴望继续拿分欧冠巴塞罗那VS国际米兰巴萨背水一战!国米渴望继续拿分欧冠迎来焦点战!巴塞罗那主场退无可退,国米全力出击渴望拿分北京时间10月13日凌晨三点,欧冠C组第4轮将迎来一场焦点大战,西甲底线没白看,学到了混职场的经典生存和升职之术用情感诠释故事,用故事讲述情感,这里是大脸猫讲故事最近一直在看热播剧底线,大家都在热议其中被众多真实的社会热点案例改编的案子,可是我最欣赏和关注的,却是这部剧中关于职场晋升的一些套油价调整最新消息!10月12日,92号95号汽油,柴油最新油价由于市场对石油需求的担忧,国际油价连跌2天,下跌幅度将近4,这让油价的预期涨幅下降了25元吨,但目前仍远超上调标准线。这一轮油价调整恐怕要上涨了,各位车主多加注意!10月12日,新黑龙江建立定期通报反馈机制保障特约监察员履职尽责中央纪委国家监委网站徐凡通讯员董云平建议拓宽外部监督渠道,监督纪检监察干部八小时之外,净化朋友圈社交圈。近日,黑龙江省纪委监委特约监察员省政法管理干部学院地方法治与政策研究部主任李喜迎二十大把创新作为引领发展的第一动力科技工作者加快推进高水平科技自立自强2022年9月25日6时55分,我国在太原卫星发射中心使用快舟一号甲运载火箭,以一箭双星方式,成功将试验十四号和试验十五号卫星发射升空,卫星顺利进入预定轨道,发射任务获得圆满成功。初始美学对美学的认知源于生活中对美的追求,这体现在生活的方方面面。如,看到美丽的景色就会非常陶醉,像九寨沟深蓝浅绿的湖水让人惊叹看到美丽的建筑就忍不住发出啧啧的赞叹声,像哈尔滨的索菲亚大教诗意云水谣从福州坐动车,两个多小时到达南靖。南靖给我的第一印象是盛产香蕉的地方,因为火车站周边到处都是香蕉园,车站上也有很多兜售香蕉的小贩。不过呢,南靖火车站还是很有特色的,设计成福建土楼的OPPO新机再曝,后置多摄环闪设计目前,OPPO已经带来了多款旗下新机,而其后续将带来的手机产品也备受关注。现在,再次有爆料提到了可能会到来的OPPO新品细节信息。近日,博主熊猫很禿然在一份爆料中提到欧加未来某新机LCD党的福音来了它是iPhoneSE4,也是iPhoneXr2。0版显示屏供应链咨询公司DSCC分析师RossYoung最近放料称,iPhoneSE4将于明年春季发布,相关配置自然也是满足了所有iPhoneXr的需求。正面长刘海6。1英寸LCD护眼