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

每个开发人员都应该知道的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斤,挑篮子里好的就可以了。但是如果你要买一筐,相信老板不会让你一个一个挑,而是一次给你一整筐。当然,大家也不傻,谁都知道篮子里肯定有几个坏果子。但这样对老板来说效率最高,成本也最低。

LOL大乱斗里的陷阱英雄,看似很强,实则非常难赢不知道大家发现没有,在大乱斗里,有些英雄看起来很猛,但实际上非常难赢。这其中呢,有一些后期英雄,前期相当于少个人吸队友血,劣势局根本玩不了。还有一些是自带BUFF的英雄,也就是大家顶级平板价格并不贵?华为MatePadPro2022款3299元到手前一段时间,华为发布了不少新品,这其中就有一个非常吸引人的产品,华为MatePadPro2022款。这款平板依然是11英寸,不过整体设计上更高端,观感和视听效果也更好。至于价格,现魅蓝新机抄袭iPhone13自作自受,30天只卖出了86部说起魅蓝手机,很多人就会想到那句经典的Slogan青年良品,如今的魅蓝不仅没做良品,甚至还在劣品的道路上越走越远。就在上个月,魅蓝推出了一部名为10s的新机型,但这部手机的外观却备从月薪3万的运营总监,到咨询费500万的营销顾问我为什么离开游戏行业?在我的朋友圈里,张阳可能是转型最成功的游戏人。他曾是飞流游戏事业部的总经理,发行过啪啪三国攻城略地等多个千万月流水的爆款后来拿了红杉的投资,独立创业,最终团队解散,欠下几百万的债务Dota2阿灵顿Major战报LGD强无敌,Aster已直邀,RNG惹人担忧哈喽大家好,这里是蜻蜓队长Zwj。随着本次阿灵顿Major赛程的推进获得TI11直邀资格的队伍已经大致确定了,下面就让队长带大家一起来简单地了解一下吧!PSG。LGD(已直邀)众所适合开学季入手的机型汇总,预算3。5k即可冲,性价比一个比一个高8月份悄然而至,对大学生和准大学生来说暑假余额大概还有一个月,准备好重振旗鼓出发了么?除了要调整好自己的状态,进入学校之前当然要做一些吃穿用度等必要的准备,当然一款适合自己的智能手想装中央空调?先接受了它的6大缺陷再说吧,很多人装完就后悔最近几年中央空调越来越火,和大家的生活好了有关,更和中央空调的成本下降有关。几乎每一个卖中央空调的售货员,都能罗列出一系列中央空调的优势(相比于传统分体式空调)。但是实际好不好用,最全能骁龙8游戏手机7。9毫米塞下5100大电池,还有光学防抖不得不说,虽然很多人对于联想这个品牌有着一些厌恶情绪,但这两年联想却凭借令人难以抵挡的超高性价比和极其超前配置的各类型手机不断刷新着人们的眼球。明天联想旗下摩托罗拉会带来三款新机,云顶之弈2。15版本改动,最平衡版本到来,敖兴亚索再次加强前言大家好,我是小嗨。巨龙2。15版本将会是有史以来最平衡的版本,本次对于热门阵容进行了小幅度的削弱,以及部分阵容加强,巨龙版本也只有两个版本的优化更新了。下个版本(2。16)预计又创新高!国内手游7月吸金20亿美元,网易新游不想赚玩家的钱近几年国内的手机游戏发展迅速,不少游戏厂商都借此东风加重了移动端游戏的投入,除了立足于国内市场之外,在全球市场上国内的手机游戏厂商也都取得了不小的成功,甚至于步入2022后,中国手2010年的玩家都在玩什么游戏?不知道你们是否与我一样?每当我失落难过的时候总会想起过去的那些快乐时光,人嘛,有时候必须得靠一些快乐的回忆才能在生活的重压下继续往前走。记得2010年的夏天,我家配了台新电脑,也是借此机会,那年暑假我玩了
三季度出货量同比下降11。9中国智能手机市场仅苹果正增长经济观察网曹妍文由于手机保有量见顶换机周期延长,国内市场很难出现前几年的快速增长局面。10月28日,IDC中国高级分析师郭天翔在IDC中国智能手机市场动态媒体沟通会上表示。根据IDINMO二代发布会总结,这是你想象的元宇宙吗?1。外观提升采用BlackUrbanTech中作者威廉对未来赛博朋克的幻想风格进行外观改造,镜腿改为了整体走面的宽面镜框,镜身采用反光粒子,哑光陨铁色的配色,两侧的logo依然显眼漫步者花再光冷能量音箱NEWX评测桌面上的幻彩好声现如今当代年轻人对于桌面电子消费类产品有着更多新的需求。漫步者花再品牌敏锐地捕捉到了年轻消费群体这一全新的诉求,因此就在近日为年轻人带来了一个全新的集成式解决方案全球首款光冷能量音发布24个月后,苹果iPhone12Pro手机,还能不能再战三年?很多用户之所以选择苹果手机,主要有两个方面的原因第一,苹果iOS系统的流畅性第二,苹果手机的保值率。苹果iPhone12Pro,作为苹果手机曾经的旗舰机型,该机发布已经超过24个月把影院搬回家!松下120Hz高刷JX900C大屏电视居家体验如今的智能电视市场,屏幕尺寸差异非常巨大。小到43英寸,大到100英寸以上,面对不同家庭需求,这些尺寸都有着很大的市场。随着互联网电视的入场,电视的设计方向开始往越来越智能,功能越真实测评iOS16。1正式版值得升级吗?IOS16。1正式版终于发布了,这10个新改进,你都知道吗?今天给大家分享一下iOS16。1改进的常用功能。1。全面支持电量百分比本次更新后,所有的全面屏iPhone都开始支持电量一张图看懂红米note12购机指南1。红米Note12Pro发布2199元起8256GB2199元(首发价2099元)12256GB2399元(首发价2299元)2。红米Note12探索版发布2399元8256GB双11再遇先涨后降,手机又是重灾区,这三款手机得以幸存尽管已经进入了双11的预售期,但也有很多网友表示,天猫的华为OPPO等多款手机,都出现了涨价降价的情况。这样的行为在前几年的双11中经常发生。随着,法律的普及,有这方面的专家介绍到以创新驱动商业变革,ThinkPadX1Fold2022Z系列等多款新品亮相2022年10月28日14时,联想在全球总部召开以新商业领导力为主题的ThinkPad30周年新品发布盛典。全新一代折叠屏笔记本电脑ThinkPadX1Fold2022震撼登场,同在青岛怀孕后产检消费有多少孩子出生前后需要准备的物品以及孩子用的消耗品纸尿裤前两天都简单梳理了一下,今天就把孕期产检的时间以及费用梳理一下吧,权当留个记录宝宝是平安夜出生的,因为妊娠期高血压,39周整,剖腹带娃上班的心愿实现啦!杭州新添一所嵌入式幼儿园视频加载中杭州这所幼儿园竟然能带娃上班?10月28日,杭州滨江区大华幼儿园正式开园。这所嵌入式幼儿园,为不少家长解决了孩子看护难的烦恼,园内设有开放式乐高区沉浸式体验教室3D裸眼空