将子

更新时间:2023-03-24 08:44:01 阅读: 评论:0

六一儿童节的来历-痛风是什么引起的

将子
2023年3月24日发(作者:汽车租赁合同)

mysql⼦查询执⾏顺序_MySQL的语句执⾏顺序

下⾯我们来具体分析⼀下查询处理的每⼀个阶段MySQL的语句⼀共分为11步,如下图所标注的那样,最先执⾏的总是FROM操作,最后执

⾏的是LIMIT操作。其中每⼀个操作都会产⽣⼀张虚拟的表,这个虚拟的表作为⼀个处理的输⼊,只是这些虚拟的表对⽤户来说是透明的,

但是只有最后⼀个虚拟的表才会被作为结果返回。如果没有在语句中指定某⼀个⼦句,那么将会跳过相应的步骤

FORM:对FROM的左边的表和西湖景 右边的表计算笛卡尔积。产⽣虚表VT1

ON:对大学专业查询 虚表VT1进⾏ON筛选,只有那些符合的⾏才会被记录在虚表VT2中。

JOIN:如果指定了OUTERJOIN(⽐如leftjoin、rightjoin),那么保留表中未匹配的⾏就会作为外部⾏添加到虚拟表VT2中,产⽣虚拟表

VT3,rugfrom⼦句中包含两个以上的表的话,那么就会对上⼀个join连接产⽣的结果VT3和下⼀个表重复执⾏步骤1~3这三个步骤,⼀直

到处理完所有的表为⽌。

WHERE:对虚拟表VT3进⾏WHERE条件过滤。只有符合的记录才会被插⼊到虚拟表VT4中。

GROUPBY:根据groupby⼦句中的列,对VT4中的记录进⾏分组操作,产⽣VT5.

CUBE|ROLLUP:对表VT5进⾏cube或者rollup操作,产⽣表VT6.

HAVING:对虚拟表VT6应⽤having过滤,只有符合的记录才会被插⼊到虚拟表VT7中。

SELECT:执⾏lect操作,选择指定的列,插⼊到虚拟表VT8中。

DISTINCT:对VT8中的记录进⾏去重。产⽣虚拟表VT9.

ORDERBY:将虚拟表VT9中的记录按照进⾏排序操作,产⽣虚拟表VT10.

LIMIT:取出指定⾏的记录,产⽣虚拟表VT11,并将结果返回。

⼦查询的执⾏

⼦查询⼜称内部查询,⽽包含⼦查询的语句称之外部查询(⼜称主查询)。

所有的⼦查询可以分为两类,即相关⼦查询和⾮相关⼦查询。

⾮相关⼦查询是独⽴于外部查询的⼦查询,⼦查询总共执⾏⼀次,执⾏完毕后将值传递给外部查询。

相关⼦查询的执⾏依赖于外部查询的数据,外部查询执⾏⼀⾏,⼦查询就执⾏⼀次。

使⽤过oracle或者其他关系数据库的DBA或者开发⼈员都有这样的经验,在⼦查询上都认为数据库已经做过优化,能够很好的选择驱动表执

⾏,然后在把该经验移植到mysql数据库上,但是不幸的是,mysql在⼦查询的处理上有可能会让你⼤失所望,在我们的⽣产系统上就碰到

过⼀些案例,例如:SELECTi_id,

sum(i_ll)ASi_ll

FROMtable_data

WHEREi_idIN

(SELECTi_id

FROMtable_data

WHER幽默智力题及答案 EGmt_create>='2011-10-0700:00:00')

GROUPBYi_id;

(备注:sql的业务逻辑可以打个⽐⽅:先查询出10-07号新卖出的100本书,然后在查询这新卖出的100本书在全年的销量情况)。

这条sql之所以出现的性能问题在于mysql优化器在处理⼦查询的弱点,mysql优化器在处理⼦查询的时候,会将将⼦查询改写。通常情况

下,我们希望由内到外,先完成⼦查询的结果,然后在⽤⼦查询来驱动外查询的表,完成查询;但是mysql政治鉴定 处理为将会先扫描外⾯表中的所

有数据,每条数据将会传到⼦查询中与⼦查询关联,朝三暮四的故事及寓意 如果外表很⼤的话,那么性能上将会出现问题;

针对上⾯的查询,由于table_data这张表的数据有70W的数据,同时⼦查询中的数据较多,有⼤量是重复的,这样就需要关联近70W次,

⼤量的关联导致这条sq贱男人 l执⾏了⼏个⼩时也没有执⾏完成,所以我们需要改写sql:SELECTt2.i_id,

SUM(t2.i_ll)ASsold

FROM

(SELECTDISTINCTi_id

FROMtable_data

WHEREgmt_create>='2011-10-0700:00:00')t1,

table_datat2

WHEREt1.i_id=t2.i_id

GROUPBYt2.i_id;

我们将⼦查询改为了关联,同时在⼦查询中加上distinct,减少t1关联t2的次数;

改造后,sql的执⾏时间降到100ms以内。

mysql的⼦查询的优化⼀直不是很友好,⼀直有受业界批评⽐较多,也是我在sql优化中遇到过最多的问题之⼀,mysql在处理⼦查询的时

候,会将⼦查询改写,通常情况下,中枢机构 我们希望由内到外,也就是先完成⼦查询的结果,然后在⽤⼦查询来驱动外查询的表,完成查询,但是恰

恰相反,⼦查询不会先被执⾏;今天希望通过介绍⼀些实际的案例来加深对mysql⼦查询的理解。

本文发布于:2023-03-24 08:43:59,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/1679618641367832.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:将子.doc

本文 PDF 下载地址:将子.pdf

下一篇:返回列表
标签:将子
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图