MySQL的语句一共分为11步,如下图所标注的那样,最早实行的老是FROM操纵,末了实行的是LIMIT操纵。个中每个操纵都邑发生一张假造的表,这个假造的表作为一个处置惩罚的输入,只是这些假造的表对用户来说是通明的,然则只要末了一个假造的表才会被作为效果返回。假如没有在语句中指定对应的操纵,那末将会跳过响应的步骤。
(7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (6) HAVING <having_condition> (9) ORDER BY <order_by_condition> (10) LIMIT <limit_number>
下面我们来具体剖析一下查询处置惩罚的每个阶段
1、FORM: 对FROM的左侧的表和右侧的表盘算笛卡尔积。发生虚表VT1
2、ON: 对虚表VT1举行ON挑选,只要那些相符<join-condition>的行才会被纪录在虚表VT2中。
3、JOIN: 假如指定了OUTER JOIN(比方left join、 right join),那末保存表中未婚配的行就会作为外部行添加到假造表VT2中,发生假造表VT3, rug from子句中包括两个以上的表的话,那末就会对上一个join衔接发生的效果VT3和下一个表反复实行步骤1~3这三个步骤,一向随处置惩罚完一切的表为止。
4、WHERE: 对假造表VT3举行WHERE前提过滤。只要相符<where-condition>的纪录才会被插进去到假造表VT4中。
5、GROUP BY: 依据group by子句中的列,对VT4中的纪录举行分组操纵,发生VT5.
6、CUBE | ROLLUP: 对表VT5举行cube或许rollup操纵,发生表VT6.
7、HAVING: 对假造表VT6运用having过滤,只要相符<having-condition>的纪录才会被 插进去到假造表VT7中。
8、SELECT: 实行select操纵,挑选指定的列,插进去到假造表VT8中。
9、DISTINCT: 对VT8中的纪录举行去重。发生假造表VT9.
10、ORDER BY: 将假造表VT9中的纪录根据<order_by_list>举行排序操纵,发生假造表VT10.
11、LIMIT: 掏出指定行的纪录,发生假造表VT11, 并将效果返回。
相干引荐:
mysql中utf8和utf8mb4之间的区分有哪些?
mysql中group_conca函数的怎样修正其长度限定
mysql大表中count()的用法以及mysql中count()的优化以上就是mysql中语句实行的递次以及查询处置惩罚阶段的剖析的细致内容,更多请关注ki4网别的相干文章!