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 条评论) |