游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

无效回表谁的锅?存储引擎这事儿不赖我

  明确场景
  要回答这个问题,我们一般分几步来走:
  1。确认问题,对齐Sql语句;
  2。解答问题本身,也就是时间复杂度分析;
  3。针对本身提出这个场景,可能出现的性能瓶颈进行分析;
  4。针对瓶颈,提出多种优化手段。
  接下来我们就按照这个思路来一步步深入。
  对齐Sql语句
  通常而言,面试官抛出一个问题,不见得就是一个非常完善、非常准确的描述,他其实是希望你能提出问题,通过沟通对齐,这也是工作中必备的能力。
  首先问面试官,目前表的结构大概是怎样,索引的建设,又是怎样的,假设通过沟通,我们得到如下简化过的表tplayer:
  字段名
  类型
  描述
  id
  bigint(20)unsigned
  主键id
  score
  int(11)unsigned
  分数
  name
  varchar(128)
  姓名
  只在score字段上建了二级索引,大小是从小到大。这里要找第k个,其实就是偏移k1:selectfromtplayerorderbyscoredescoffsetk1limit1
  时间复杂度分析
  这个问题的核心就是查找语句的时间复杂度是多少?
  这道题实际是有一定引导性的,故意说索引,就是想让你往树分支上引,我们都知道,走索引,按数值本身查找一个数据,那二级索引的时间复杂度,肯定是O(logN)。
  但这题不一样,是找第k个,比如第100个,我们其实是不知道树的分支结构具体是怎样的,也就是说我们不知道左子树有多少个节点,右子树有多少个节点。
  进一步而言,我们没法确定走哪条路,树的分支结构不可行。
  所以这里其实是考察B树的理解,B树除了分支,底层还有一个双链表,直接走双链表查询,反而是更快的了。
  时间复杂读O(N),我们反过来想,其实这道题就是考你B树数据结构,如果直接问你B树结构,大多数有准备的同学,都能回答清楚,但是通过一个实际问题来问你,只有真正理解其作用,才能快速答出。
  这就完了吗?当然没有,这只是一个起手式,下一步,面试官肯定会问你这个操作的性能如何,当然你也可以主动谈起。
  offet慢问题
  如果offset大于10000,这个数据查询就会非常的慢。为什么会慢呢,一般都会答因为遍历,时间复杂度是O(N)。
  但实际如果你测试一下,你会发现这条语句会慢得离谱,这绝不是所谓遍历能导致的。
  更深层次的原因在于,对于前10000个不需要的数据,MySQL每次也要回表去查找,这就导致了10000次随机IO,当然慢成狗。
  优化方案
  如果有开发经验的同学,会很容易想到从业务形态上去优化,这里就不卖关子了,这种场景通常有三种解决方案。
  1。业务上绕过
  将limit、offset,改为next,也就是将第x页,改为下一页,这样就
  可以通过树分支查找。
  举个例子,百度的搜索界面,就是典型的分页面。
  而现在移动互联网时代,用得更多的就是上一页、下一页这样的翻页逻辑,微博、抖音都是这样的逻辑。记录score为prevscoreselectscorefromtplayerorderbyscoredesclimit20记录score为prevscoreselectscorefromtplayerwherescoreprevscoreorderbyscoredesclimit20
  使用这种模式,可以利用树索引直接找到目标,也绕过了无效回表问题,在Offset超过一万的情况下,性能通常都能提高两个量级以上。
  当然,这种适合给分页做优化,如果回到我们题目本身来说,那查找第k大的数,就需要循环下一页下去,损耗反而更大。
  2。硬碰硬
  上面分析了,对无用数据还回表查询,导致大量随机IO,是性能的核心瓶颈,那我们对症下药,能否不回表呢?
  当然可以,我们可以进行索引覆盖。
  索引覆盖是说当二级索引查询的数据都在二级索引本身,比如索引Key或主键ID,那么就不必再去查聚簇索引。
  那你可能会问,在我们的场景,还有其它需要查询的信息,比如名字,并不在二级索引上啊。
  是的,但我们可以通过sql的拆分,来达到目的,思路如下:selectfromtplayeridin(selectidfromtplayerorderbyscoreoffset10000limit1)
  这句话是说,先从条件查询中,查找数据对应的数据库唯一id值,因为主键在辅助索引上就有,所以不用回归到聚簇索引的磁盘上拉取。
  如此以来,offset部分均不需要去反查聚蔟索引,只有limit出来的10个主键id会去查询聚簇索引,这样只会1次IO。
  在业务确实需要用分页的情况下,使用该方案可以大幅度提高性能,通常能满足性能要求。
  有同学可能担心本身走B树的双指针会是瓶颈,牛哥也做了测试:
  一张500w的表,offset10000,要是没索引覆盖,处理时间甚至可以达到十秒级,有了的话,能降低到十毫秒级,有质的飞跃。
  ps:具体时耗和数据库性能等因素有关,以上数据只是参考。
  3。预判边界值
  这其实也是根据业务场景的做法,能通过业务预判边界,这种方式并不是通用解决方案,但因为《高性能MySQL》中提到了,也一并列出来。
  深层次灵魂发问
  为什么MySQL不直接丢掉无用数据,还要傻乎乎地回表?
  也许你曾经听过一个词,叫索引下推,在MySQL5。6之后,MySQL通过索引下推提升了性能。
  这个问题也类似,答案是Offset未曾下推!我们先review下查找流程:
  1。存储引擎通过二级索引查找,获取主键值;
  2。进行回表操作,将完整记录返回给上层;
  3。上层判断是否需要该记录,需要则返回给客户端,不需要则跳过该记录;
  4。存储引擎接着查找下一条;
  5。重复第二步。
  从流程其实我们能看出,存储引擎层是没有Offset信息的。
  牛哥和咱们训练营导师虎哥也讨论过这个问题,虎哥的解释还是比较到位的:
  MySQL不做的原因,无非两点:
  1。限制场景太多,给多个引擎做有点得不偿失;
  2。更核心的,分层设计理念,这件事本身是Sql层的,本就不该存储引擎做。
  野生db
  那我们现在来看看所谓的野生db的情况:
  野生db1号:阿里云
  野生db2号:腾讯云
  另外,腾讯云还描述了适用场景:
  下推之后阿里云测试了性能,Q3即我们二级索引orderby。。。limit回表的场景,可以看到从25s降低到了329ms左右,相差75。82倍。
  可以发现阿里腾讯两大云厂商MySQL自研版本都做了下推,那MySQL从技术上自然也能。
  有大佬针对这个问题还给MySQL提了bug。https:bugs。mysql。combug。php?id109173
  还带了修复方案:
  https:bugs。mysql。comfile。php?id31884bugid109173
  当然mysql有自己的设计理念和坚持,可能以后也不会采纳。
  而将阿里云、腾讯云这些称为野生db,其实也只是调侃的说法。
  实际上他们都遵循实用原则,是非常优秀的团队,自研产品的决策灵活性本身也更高一些。
  这倒不是非要分个孰优孰劣,大家搞清楚前因后果即可。
  补丁分析
  虽然我们已经将前因后果弄得很清楚,但相信还是会有同学好奇,上面的大佬做的补丁,到底是怎样的。牛哥和虎哥,也做了一些分析。
  核心要素就是在引擎层增加了这么一个函数,可以下推索引。
  这个函数有几层,最核心的其实在这里:
  其实就是offset判断,如果offset比现在的遍历偏移还大,就跳过。
  Sql层会调用引擎层这个函数,当然调用之前会有个判断。
  很复杂是吧,没事,咱们看注解:
  其实就是限制了很多情况,比如groupby,having这种推了也不顶用的,就不推了。
  Review一下
  可以看到,看起来很简单的一个问题,其实牵涉到的知识很广:
  首先时间复杂度是多少?考察B树结构;
  Offset为什么慢?考察对底层行为一定程度的掌握;
  几种解决方案?考察技术视野和解决问题的能力;
  深层次行为原因?考察MySQL分层架构,及对开源社区的关注。
  如果你只是背八股文,而不去深入探索其中的原理,那面试官随便问几个问题,就能看出你其实基础是不扎实的。
  这里不是说八股文不好,而是不能觉得面试就是考八股文,这其实是一个很大的误区。

神十三的工力量!华菱线缆助力航天事业逐梦星辰大海北京时间2021年10月16日0时23分,搭载神舟十三号载人飞船的长征二号F遥十三运载火箭,在酒泉卫星发射中心按照预定时间精准点火发射,神舟十三号载人飞船与火箭成功分离进入预定……37岁辞职自学C上位机开发通信类库第1天已完成HandSha尊敬的网友们大家好,今天我正式开始离职在家专心自学C上位机开发了,练习项目是:老东家N种私有协议的通信类库开发,类库短期目标是支持0x81、0x5AA5、0xAA55这三种协议……公认口碑好的3款中端机,最低1418元,国产优质手机太香了国产手机有很多优质的产品,虽然是中端机的配置,但是搭配上超低的价格后可以被划分为为高性价比手机。再加上这些手机在转转二手平台上的价格折上加折,就可以登顶登顶性价比的巅峰了。今天……居然要657元!诺基亚发布翻盖机搭载高通芯片,支持4G11月3日,HMDGlobal推出了一款全新的翻盖手机,这家厂商出的手机,大家应该都能猜到了,并非是我们常见的折叠屏或旗舰机,它就是一款老式翻盖功能机,这款新机就是诺基亚278……长期吃降压药的人,是否该定期检查身体?应该做哪些检查?目前,大家的生活节奏不断加快,有部分人群,出现了不规律的生活习惯,加上生活中的不良习惯,往往会使自身患上疾病,其中最为常见的,就是高血压了。如今高血压的患病人数,正不断地增长,……置森智慧旅游解决方案智慧旅游系统是紧紧围绕三区三城的建设而提出的应用系统系统建设,借助于数据挖掘、物联网、人工智能等新兴科学技术,实现旅游业智能化、快速发展,着重立足于以游客为中心的多部门协作的信……陈思诚与红裙女子当众搂抱,新女友被爆23岁,两人手牵手动作亲很多人都觉得《真正男子汉》有毒,先有王宝强老婆马蓉出轨,后有杨幂老公刘恺威的夜里看剧本事件,又有佟丽娅老公陈思诚同时和两个姑娘过夜潇洒。就在2021年5月20日,陈思诚佟丽娅7……孩子有抑郁症不上学,家长陷入塔西佗陷阱,和孩子说话不要仪式化这么多年来,我所指导的案例中,不乏名牌大学的学生,清华北大,985、211,现在又出来了双一流高校。国外的斯坦福、宾夕法尼亚、普度、杜克、加州理工、牛津、剑桥、东京大学都有。去……只剩一只松鼠,过气网红三只松鼠还能翻身吗?文:财侦探来源:丽尔摩斯三只松鼠再也不能躺平流量中近日,三只松鼠(300783。SZ)发布2022年半年度报告显示,公司上半年营业收入41。14亿元,同比下降……本周热点回顾(11。2912。3)暗黑手游国服二测开启哈喽,这里是周末特别企划【本周热点回顾】,想知道11。2912。3这周大伙最关注的热点有哪些吗?九酱带你们快速一览。新游爆料国服二测开启《暗黑破坏神:不朽》11月2……Vlookup实现不了的功能我用Xlookup函数实现,即简Vlookup函数,最常用的查询引用函数之一,在Excel的数据查询引用中占有一席之地,非常的使用,如果你还掌握,请查阅历史中的相关记录,但Vlookup函数也有一些缺陷,如逆……红军有一二四方面军,为何独缺红三方面军?红三方面军是否存在?红军分为红一方面军,红二方面军和红四方面军,但是很少有人听说过红三方面军,那么红三方面军去哪了?红三方面军真的存在吗?其实红军开始长征前是存在着红三面军的,当时红军共有四……
易经中医学中的阴阳阴阳学说在中医学中有广泛的应用。它被用来解释人体生理现象及病理变化的规律。简单地说,阴指人体实质性的物质,如血液、津液、泪水、鼻水、内分泌液等;阳指人体非实质的物质,即身体的机……大数据应用开发流程通常将大数据应用开发分为五个步骤:获取、存储、处理、访问以及编制,获取是指获取一些辅助数据,例如来自CRM、生产数据(ODS)的数据,并将其加载入分布式系统(如Hadoop)为……36氪独家丨蔚来整车工厂暂停生产,新老车型交付迟缓文丨彭苏平编辑丨杨轩李勤造车新势力又遇黑天鹅。36氪独家获悉,近日受防疫要求,蔚来位于合肥的两座工厂相继停产,目前旗下车型的交付进度普遍延缓。有知情人士……一个聪明人,不会让亲戚住在家里,这不是人情冷漠,而是富有远见图源自网络侵权请联系删除的确,人与人之间,不管是谁,走得如果太近,摩擦是不可避免的。要想尽可能地避免摩擦,就需要保持分寸感,这种分寸感就是界限感。如果一个人连……AirPods都不支持的无损音乐,苹果为什么还要强推AppleMusic重拳出击。不久前,苹果宣布,将为整个AppleMusic曲库提供无损音质选项,并推出基于杜比全景声标准的空间音频功能。而且所有无损、空间音频内容都将直……人生,能自己扛,就别声张生活艰难,人心凉薄,难过的时候,自己默默消化,说给别人听,别人未必愿意听。做人,要有自知之明,自己的苦,只能自己吃;自己的累,只能自己受,谁都无法替你解忧愁。能自己……女人过了50岁,还是穿运动鞋更实在,时髦百搭,配裙子更有女人夏天即将来临,女性朋友们的衣橱也开始更新换代了,各种新衣服穿起来,新鞋子踩在脚下,分分钟就可以成为时髦精。但是普通女人的搭配也不能只是局限于高跟鞋,尤其是过了五十岁的成熟女性,……苹果直呼MacStudio台式机电脑拥有先进的耳机插孔感谢IT之家网友生之如舟的线索投递!IT之家3月9日消息,苹果今日推出了全新的MacStudio台式电脑和StudioDisplay显示器,宣称充分满足用户的各项需求,帮……湖南省的这个县设置较晚,人称中国印章之乡,餐饮业全国闻名湖南省衡东县风光湖南省衡东县是衡阳市的下辖县之一,全县面积1926平方公里,常住人口约60万人。2021年实现地区生产总值315。6亿元。湖南省衡东县风光一、……5199元起,苹果iPhone13Pro系列绿色苍岭绿色版本IT之家3月11日消息,苹果3月9日为iPhone13Pro和iPhone13全新推出两种配色苍岭绿色和绿色。新推出的苍岭绿色iPhone13Pro和绿色iPhone13……卡塔尔世界杯F组克罗地亚胜加拿大11月27日,克罗地亚队球员克拉马里奇(下)在比赛中打入第二粒进球后与队友佩里西奇(中)、洛夫伦庆祝。新华社记者丁旭摄当日,在卡塔尔多哈哈里发国际体育场进行的2022卡塔……苹果iPadOS15。4正式版将支持任何iPad启用动态音量IT之家3月12日消息,据9to5Mac报道,早在去年秋天推出的iPadmini6,已经成为苹果首款提供智能音量按钮的方向功能的平板电脑。现在,这项功能已经扩大到其余的iPad……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网