加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

步步深入MySQL:架构-查询执行流程-SQL解析顺序

发布时间:2018-10-21 09:43:12 所属栏目:编程 来源:AnnsShadoW
导读:【新品产上线啦】51CTO播客,随时随地,碎片化进修 一、媒介 一向是想知道一条SQL语句是怎么被执行的,它执行的次序是奈何的,然后查察总结各方资料,就有了下面这一篇博文了。 本文将从MySQL总体架构---查询执行流程---语句执行次序来切磋一下个中的常识。

这个子句对VT3表中的差异的组举办过滤,只浸染于分组后的数据,满意HAVING前提的子句被插手到VT4表中。

  1. mysql> SELECT 
  2.     -> * 
  3.     -> FROM 
  4.     -> table1 AS a 
  5.     -> LEFT OUTER JOIN table2 AS b ON a.uid = b.uid 
  6.     -> WHERE 
  7.     -> a. NAME = 'mike' 
  8.     -> GROUP BY 
  9.     -> a.uid 
  10.     -> HAVING 
  11.     -> count(b.oid) < 2; 
  12. +-----+------+------+------+ 
  13. | uid | name | oid  | uid  | 
  14. +-----+------+------+------+ 
  15. | ccc | mike |    6 | ccc  | 
  16. | ddd | mike | NULL | NULL | 
  17. +-----+------+------+------+ 
  18. 2 rows in set (0.00 sec)  

5、SELECT

这个子句对SELECT子句中的元素举办处理赏罚,天生VT5表。

(5-J1)计较表达式 计较SELECT 子句中的表达式,天生VT5-J1

(5-J2)DISTINCT

探求VT5-1中的一再列,并删掉,天生VT5-J2

假如在查询中指定了DISTINCT子句,则会建设一张内存姑且表(假如内存放不下,就必要存放在硬盘了)。这张姑且表的表布局和上一步发生的假造表VT5是一样的,差异的是对举办DISTINCT操纵的列增进了一个独一索引,以此来除一再数据。

  1. mysql> SELECT 
  2.     -> a.uid, 
  3.     -> count(b.oid) AS total 
  4.     -> FROM 
  5.     -> table1 AS a 
  6.     -> LEFT OUTER JOIN table2 AS b ON a.uid = b.uid 
  7.     -> WHERE 
  8.     -> a. NAME = 'mike' 
  9.     -> GROUP BY 
  10.     -> a.uid 
  11.     -> HAVING 
  12.     -> count(b.oid) < 2; 
  13. +-----+-------+ 
  14. | uid | total | 
  15. +-----+-------+ 
  16. | ccc |     1 | 
  17. | ddd |     0 | 
  18. +-----+-------+ 
  19. 2 rows in set (0.00 sec)  

6、ORDER BY

从VT5-J2中的表中,按照ORDER BY 子句的前提对功效举办排序,天生VT6表。

留意:

独一可行使SELECT中别名的处所;

  1. mysql> SELECT 
  2.     -> a.uid, 
  3.     -> count(b.oid) AS total 
  4.     -> FROM 
  5.     -> table1 AS a 
  6.     -> LEFT OUTER JOIN table2 AS b ON a.uid = b.uid 
  7.     -> WHERE 
  8.     -> a. NAME = 'mike' 
  9.     -> GROUP BY 
  10.     -> a.uid 
  11.     -> HAVING 
  12.     -> count(b.oid) < 2 
  13.     -> ORDER BY 
  14.     -> total DESC; 
  15. +-----+-------+ 
  16. | uid | total | 
  17. +-----+-------+ 
  18. | ccc |     1 | 
  19. | ddd |     0 | 
  20. +-----+-------+ 
  21. 2 rows in set (0.00 sec)  

7、LIMIT

LIMIT子句从上一步获得的VT6假造表中选出从指定位置开始的指定行数据。

留意:

offset和rows的正负带来的影响;

当偏移量很大时服从是很低的,可以这么做:

回收子查询的方法优化,在子查询里先从索引获取到最大id,然后倒序排,再取N行功效集

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读