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

600倍效率提升sql查询优化从几十秒到几十毫秒

  背景
  运维反馈说线上一个接口越来越慢,大概二三十秒才有返回。
  查看接口代码,定位问题出在sql查询效率上。
  sql意图是将多个号码最新的数据返回给前端使用。
  单表数据量 530万左右,id为主键,phone为普通索引优化过程原sql如下,通过in + 子查询方式查询select * from 	t_user_track  where 	id in      (select max(id) as id    		from t_user_track  			where phone in ("xxxxx", "xxxxx")  			group by phone)
  执行时间在30秒左右,
  explain查看执行计划
  可以看出子查询走上了索引,主查询没有走索引,全表查询,rows=2333216同事写了一段新的sql来查询,如下select * from (             select             DISTINCT *             from t_user_track             where             phone in ("xxxxx", "xxxx")             order by locate_time desc         ) t         group by phone;
  执行时间在4秒左右
  查看执行计划
  派生表查询走上了phone的索引,rows=157108,主查询没有走上索引,row=157108改成如下sql,关联表查询select *   from t_user_track t1,     (select max(id) as id from t_user_track    			where phone in ("xxxxxx", "xxxxx") group by phone) t2 where t1.id = t2.id;
  查询时间为0.04秒
  执行计划如下
  改成inner join关联表,如下sqlselect *    from t_user_track t1    INNER JOIN   (select max(id) as id from t_user_track where phone in ("xxxxxx", "xxxxx") group by phone) t2  on t1.id = t2.id
  执行时间为0.041秒
  执行计划如下
  结果
  3、4两种关联表查询效率最高原理分析3、4两种连表查询只有一次查询,且通过小表驱动大表,所以查询效率较高第一种in + 子查询的方式,需要两次查询,查询效率较低
  留下一个疑问in+子查询的方式,为什么子查询走了索引,主查询却没有走索引mysql官方文档
  mysql手册也提到过,具体的原文在mysql文档的这个章节:
  I.3. Restrictions on Subqueries
  13.2.8. Subquery Syntax
  摘抄:
  1)关于使用IN的子查询:
  Subquery optimization for IN is not as effective as for the = operator or for IN( value_list ) constructs.
  A typical case for poor IN subquery performance is when the subquery returns a small number of rows but the outer query returns a large number of rows to be compared to the subquery result.
  The problem is that, for a statement that uses an IN subquery, the optimizer rewrites it as a correlated subquery. Consider the following statement that uses an uncorrelated subquery: SELECT ... FROM t1 WHERE t1.a IN (SELECT b FROM t2);
  The optimizer rewrites the statement to a correlated subquery: SELECT ... FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.b = t1.a);
  If the inner and outer queries return  M  and  N  rows, respectively, the execution time becomes on the order of O( M × N ), rather than O( M + N ) as it would be for an uncorrelated subquery.
  An implication is that an IN subquery can be much slower than a query written using an IN( value_list ) construct that lists the same values that the subquery would return.
  2)关于把子查询转换成join的:
  The optimizer is more mature for joins than for subqueries, so in many cases a statement that uses a subquery can be executed more efficiently if you rewrite it as a join.
  An exception occurs for the case where an IN subquery can be rewritten as a SELECT DISTINCT join. Example: SELECT col FROM t1 WHERE id_col IN (SELECT id_col2 FROM t2 WHERE condition);
  That statement can be rewritten as follows: SELECT DISTINCT col FROM t1, t2 WHERE t1.id_col = t2.id_col AND condition;
  But in this case, the join requires an extra DISTINCT operation and is not more efficient than the subquery

华为余承东Mate50有向上捅破天技术!公司最新发声,这些概念股暴涨手机界的竞争已经卷到天上了!9月6日,华为即将发布Mate50系列手机,证券时报e公司记者从华为获悉,Mate50系列手机将支持卫星通信技术,成为全球首款搭载卫星通信技术的手机,这iPhone14Pro最新消息,外观反转?距离2022苹果秋季新品发布会越来越近了,就在发布会进入倒计时的关键时刻,iPhone14Pro又有新消息。近一年,相关消息都显示,iPhone14Pro将采用双挖孔的屏幕解决方案意甲最新积分榜AC米兰客胜攀升第2,那不勒斯绝杀成功登顶昨晚今晨,意甲联赛第6轮先战3场,AC米兰客场21击败桑普多利亚,升至积分榜第2位,莱奥吃到红牌,吉鲁点射绝杀国米主场10击败都灵,结束了近期的2连败,布罗佐维奇在第88分钟破门那CBA广东队最新消息朱芳雨出手真大!1米78的徐杰拿到巅峰合同CBA广东队赛出了新赛季本土球员的续签情况,目前已经确定了本土球员的一个细签了,像胡明轩,徐杰,由于两名球员去参加了国家队的比赛,所以这跟随球队续签,但是俱乐部已经给出他们新赛季的凌晨3点!国际排联最新官宣引争议,中国排球遭质疑,球迷吐槽声一片北京时间9月1日凌晨3点,针对男排世锦赛的赛况,国内媒体新浪体育进行了跟踪报道,他们表示国际排联通过官方宣布了中国男排对阵意大利男排的技术统计,在这次统计中,中国没有球员上10分。小米造车又有大事?绯闻对象立马暴涨!最新回应来了中国基金报记者文夕宣布造车的小米传来新动向。8月26日午后,市场传出消息称小米正在与北汽集团商谈制造电动汽车事宜。该消息引起北汽集团旗下多家上市公司股价异动,小米集团(1810。H油价调整最新消息今天8月26日,9295号汽油预计上调232元吨新一轮成品油调价窗口将在2022年9月6日24时开启。目前来看,这一次调整会终结5连跌,开启反弹模式,车主得提早关注油市行情。按照新一轮油价调整的第3个(8月25日)工作日原油变化汇通能源最新公告半年度净利润1151。07万元同比下降57。73汇通能源发布2022年半年度报告,实现营业收入4686。21万元,同比下降22。01归属于上市公司股东的净利润1151。07万元,同比下降57。73。截至2022年8月26日收盘,北京最新规划!发展融资租赁移动支付,拓展绿色金融科技应用场景北京商报讯(记者刘四红)8月26日,北京市金融服务工作领导小组印发北京市十四五时期金融业发展规划。其中提出,积极试点推广绿色建筑性能保险,推动北京城市副中心新建建筑全面执行绿色建筑人生三境界阅己,越己,悦己1hr我们每个人来到这个世界上,都是独立的个体,往往都带着自身的使命与担当。有的人浑浑噩噩直至生命的终结也没活明白,有的人忙忙碌碌了一生也不知道自己究竟为什么而忙碌。人这一生,我们今年暑期旅游有这些新特点原标题前半程跨省游复苏态势显著,后半程本地及周边游成为主流(引题)今年暑期旅游有这些新特点(主题)工人日报中工网记者杨召奎开学在即,暑期旅游进入尾声。工人日报记者今天综合马蜂窝去哪
谢娜,别再作妖了,娱乐圈留给你的时间不多了文章娱小丸子编辑章娱小丸子前言她是芒果一姐,却经常被大家吐槽主持功底差,疯疯癫癫的没办法正常沟通。在谢娜的主持生涯中,也因为她的疯性格出现过无数舞台事故,并且得罪了不少人。不过自从如果交完新农合后一年都没生病,算白交了吗?答案来了从去年9月份起,农村地区开始缴纳下一年度的新农合,一直到2023年上半年缴费才结束。2023年度新农合的缴费每人达到了350元,要比上一年涨了30元。与此同时,我们国家也对参与新农春节前,多地宣布2023年将上调养老金,今年调整的模式是怎样的?财经新势力新春季临近年关,越来越多的好消息传来。先是新冠疫情放开后,第一波感染高峰已过,轻症为主。而后,人民日报评烟花燃放问题不可一刀切,如今已有多个省份宣布可以限时限地燃放烟花,李佳与富商离婚后,再婚嫁靳东,大龄生子也幸福一次,李佳拍完戏回去后回到家。发现家里灯没有打开,屋子里一片黑。于是李佳把灯打开了屋子里瞬间亮了起来。她看见丈夫坐在沙发上,李佳还吓了一跳。她问丈夫你怎么在家也不开灯?丈夫说不想开桂阳做好五加五减筑牢安全防护网红网时刻新闻1月17日讯(通讯员王成家李歌宏)越是特殊时期,越应担当起社会责任,不囤积居奇不坐地起价,自觉维护价格秩序,维护广大百姓消费权益。1月16日,笔者见到桂阳县市场监管局执狂飙看懂了安欣卧底失败,才明白安长林,被孟德海利用了!刑侦剧狂飙正在热播,该剧由张译张颂文李一桐吴刚张志坚等主演,讲述了京海市刑警安欣,和鱼贩子高启强相识后,高启强逐渐背离正道,两个人渐行渐远,展开了长达20年的较量的故事。该剧选角符CBA三队宣布裁掉表现低迷外援昔日NBA7号秀正式离开山西北京时间1月18日,据CBA官方最新消息,联盟有三支球队在昨天取消了表现低迷外援注册。具体的信息为,新疆队裁掉了皮埃尔杰克逊,山西队裁掉了格雷格门罗以及福建队裁掉了基尔帕特里克。杰陈凯歌新片首支预告曝光,全明星阵容,剧情比长津湖更有深度近两年主旋律电影成为了国内电影市场的主流,尤其是电影长津湖,两部影片获得了将近百亿的电影票房,如此强大的票房号召力,自然吸引了不少的导演投身其中。长津湖之所以能取得如此亮眼的票房,狂飙看懂安欣的满头白发,才明白高启强的堕落是安欣一手造成的电视剧狂飙是近期播出的一部扫黑题材的刑侦剧,这部剧一经播出就受到许多观众的喜爱。剧中的人物安欣也受到了许多观众的关注,毕竟安欣这个人物的的出现让京海这个地方变得更加扑朔迷离了。安欣28次赔付!新华保险助患癌客户重拾治疗信心随着国家多层次医疗保障体系的建立,居民的看病压力得到了极大的缓解,但是目前,大病致贫返贫的现象依然存在,一场病或是一次意外,就可能会让整个家庭跌入谷底。于新华保险客户D女士而言,年英国经济学者中国经济较快增长的趋势将持续视频加载中英国经济学家,曾任英国伦敦经济与商业政策署署长的中国问题专家罗思义近日向中新社东西问中外对话表示,中国经济将在2023年加速回温,西方一些唱衰中国经济的言论显得非常愚蠢。