关系经济人类预测化学自然
中准网
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

如何优化MySQL深分页

2月18日 亡命徒投稿
  背景
  我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下,接下来让我们一起了解mysql的查询过程。limit偏移量越大,查询会变的越慢?
  接下来我们先造个表如下CREATETABLEaccount(idint(11)NOTNULLAUTOINCREMENTCOMMENT主键Id,namevarchar(255)DEFAULTNULLCOMMENT用户名,balanceint(11)DEFAULTNULLCOMMENT积分,createtimedatetimeNOTNULLCOMMENT创建时间,updatetimedatetimeNOTNULLONUPDATECURRENTTIMESTAMPCOMMENT更新时间,PRIMARYKEY(id),KEYidxname(name),KEYidxupdatetime(updatetime)索引)ENGINEInnoDBAUTOINCREMENT1570068DEFAULTCHARSETutf8ROWFORMATREDUNDANTCOMMENT用户表;
  比如我们查询sql如下selectid,name,balancefromaccountwhereupdatetime20210919limit100000,10;
  这个SQL的执行时间如下:
  执行完需要0。742秒,深分页为什么会变慢呢?如果换成limit0,10,只需要0。006秒哦
  我们先来看下这个SQL的执行流程:通过普通二级索引树idxupdatetime,过滤updatetime条件,找到满足条件的记录ID。通过ID,回到主键索引树,找到满足记录的行,然后取出展示的列(回表)扫描满足条件的100010行,然后扔掉前100000行,返回。
  执行计划如下:
  SQL变慢原因有两个:limit语句会先扫描offsetn行,然后再丢弃掉前offset行,返回后n行数据。也就是说limit100000,10,就会扫描100010行,而limit0,10,只扫描10行。limit100000,10扫描更多的行数,也意味着回表更多的次数。通过子查询优化
  因为以上的SQL,回表了100010次,实际上,我们只需要10条数据,也就是我们只需要10次回表其实就够了。因此,我们可以通过减少回表次数来优化。回顾B树结构
  那么,如何减少回表次数呢?我们先来复习下B树索引结构哈
  InnoDB中,索引分主键索引(聚簇索引)和二级索引主键索引,叶子节点存放的是整行数据二级索引,叶子节点存放的是主键的值。
  把条件转移到主键索引树
  如果我们把查询条件,转移回到主键索引树,那就可以减少回表次数啦。转移到主键索引树查询的话,查询条件得改为主键id了,之前SQL的updatetime这些条件咋办呢?抽到子查询那里嘛
  子查询那里怎么抽的呢?因为二级索引叶子节点是有主键ID的,所以我们直接根据updatetime来查主键ID即可,同时我们把limit100000的条件,也转移到子查询,完整SQL如下:selectid,name,balanceFROMaccountwhereid(selecta。idfromaccountawherea。updatetime20200919limit100000,1)LIMIT10;
  查询效果一样的,执行时间只需要0。038秒!
  我们来看下执行计划
  由执行计划得知,子查询tablea查询是用到了idxupdatetime索引。首先在索引上拿到了聚集索引的主键ID,省去了回表操作,然后第二查询直接根据第一个查询的ID往后再去查10个就可以了!
  通过上面的案例我们可以看出,减少回表操作,可以大幅度提升查询效率INNERJOIN延迟关联
  延迟关联的优化思路,跟子查询的优化思路其实是一样的:都是把条件转移到主键索引树,然后减少回表。不同点是,延迟关联使用了innerjoin代替子查询。
  优化后的SQL如下:SELECTacct1。id,acct1。name,acct1。balanceFROMaccountacct1INNERJOIN(SELECTa。idFROMaccountaWHEREa。updatetime20200919ORDERBYa。updatetimeLIMIT100000,10)ASacct2onacct1。idacct2。
  查询效果也是杠杆的,只需要0。034秒
  执行计划如下:
  查询思路就是,先通过idxupdatetime二级索引树查询到满足条件的主键ID,再与原表通过主键ID内连接,这样后面直接走了主键索引了,同时也减少了回表。
投诉 评论 转载

时尚养生陷阱等着你看看下面的流行时尚,再听听中医养生专家怎么说,对照一下,哪一条是你错误的观念?时尚之一洗肠、断食,排毒养颜时尚理由许多明星都坚持洗肠美容,目的是让自己的身体里没有宿……李连杰进军真人秀国际硬汉施瓦辛格史泰龙参加首秀最近,功夫巨星李连杰进军真人秀,声称在国际上都知道中国功夫,却不知道中国武术。李连杰进军真人秀,制作《谁是下一个功夫英雄》的节目,多位国际巨星将一起参加首秀,史泰龙、施瓦辛格这……毛骨悚然她居然能和过世的人交流这个世界上总是存在着许多我们无法解决的事情,我们一直以为动物之间没有语言,鬼魂和人类是两个维度的生命体。可是一个神秘女子的出现,打破了这一思维。这名女子竟然可与动物和死人交流,……小学应用题经典汇总类型归纳解题思路例,一是培养孩子的学习兴趣,另一方面就是帮助孩子巩固好基础。孩子们接触到的数学知识点多如繁星,加减乘除,分数运算,函数计算,往返求和,图形,统计。许多家长都表示孩子数学成绩……轻易打败岁月痕迹优雅女人个不老的秘密女生最害怕的莫过于衰老,很多人都在用各种方法想要留住青春,却依然难抵岁月的冲击。这里,就给你提供一些青春常驻、快乐健康的好方法,教您做个优雅,健康又快乐的女人。1、改变D……从个方面聊聊如何科学设计信息架构本文作者依据实际工作的的所思所想,分享了自己对信息架构的理解以及科学设计信息架构的一些思考,希望能够给你带来一定的启发。最近和一些产品经理朋友进行了一些交流,主要的主题是……把韭菜刻在国人脸上?这家韩国最大的寡头真的很勇,建议封杀在中国割韭菜,似乎是外来的西方企业都爱做的一件事,区别在于割的是企业,还是个人。比如哈根达斯,至今为止都是不少人心里的贵族冰淇淋,但实际真是如此吗?只要有出国留学或者游玩的小伙……所持造句用所持造句大全31、成思危是以前的副委员长,相当于副理。早在2006年,他就密切关注金融市场,并提出,中国应该削减所持有的美国债券。32、它让所持之人满手是血。33、出于自卫本能……Zigbang直帮科技住宅新消费,智能空间变革者作者:柳华芳ChatGPT火了,自动驾驶如火如荼,送餐机器人开始流行,人类正在迈入空间智能化大时代,生活方式、生产方式即将发生巨变。智能手机的辉煌十年,智能家居也进……如何优化MySQL深分页背景我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下,接下来让我们一起了解mysql的查询过程。limit偏移量越大,查询会变的……瑾字取名的含义是什么男孩男宝宝关于瑾字的名字给宝宝取名对于很多父母来说也是一件并不容易的事情,因为一个好的名字,除了要好听之外,还要有一个很好的寓意,毕竟名字会伴随宝宝的一生,如果有一个很好的寓意,那么也会给宝宝起到很大……四月桃花始盛开四月的风掠过山岭,似锦繁花恰似微波,浮起绽放的往事,零零散散起伏于记忆的田梗上。桃林漏下的日光打落花瓣,徐徐的风拂过鼻间,怀念浸泡在花香里,连带着灵魂扩散开来,融入未雨绸……
台湾经济有多依赖大陆?清空自己电商增长神器丨实在智能RPA数据自动采集客服自动回复20222023赛季NBA球员薪资排行榜前10可以不完美,但一定要真实可以不富有,但一定要快乐余生中,时间是昂贵的跟风降价,极氪的无奈神道教是日本民族宗教,号称八百万神,信徒1亿人,经常参拜神社比益生菌管用多了,每周给娃吃一次,健脾利胃助消化这样的上犹园村,你爱了吗?七年前将UC卖给马云,套现300亿的何小鹏,如今再创新奇迹融创服务市值从900亿跌至60亿,连套现的机会都不给孙宏斌
员工关系工作总结职场女性流行发型做时尚气质丽人郭松龄有着怎样的人生经历?郭松龄是怎样死的幼儿园中班健康教案如何瘦身上班族日常快速瘦身技巧自己的初中议论文热文聚热点网 孩子遭遇心理压力的信号和缓解方法你是不是在低谷的时候看清了世态炎凉?NS全球共售超9287万台马车8销量达3874万份时尚毛呢子外套搭配连衣裙让妹子美到人心坎去女人上了年纪,建议这三种连衣裙不要穿,好显老尴尬刘海怎么打理蓄发过渡期的刘海卷发方法

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州