Dawn's Blogs

分享技术 记录成长

0%

MySQL基础 (7) SELECT底层执行原理

SELECT 语句的完整结构

SQL 92

1
2
3
4
5
6
7
SELECT (DISTINCT) 字段1,字段2, ... (存在聚合函数)
FROM1, 表2, ...
WHERE 多表连接条件 AND 不包含聚合函数的过滤条件
GROUP 分组
HAVING 包含聚合函数的过滤条件
ORDER BY 字段1, 字段2 (ASC / DESC)
LIMIT index, rows

SQL 99

1
2
3
4
5
6
7
8
SELECT (DISTINCT) 字段1,字段2, ... (存在聚合函数)
FROM1 (LEFT | RIGHT) JOIN2
ON 多表连接条件
WHERE 不包含聚合函数的过滤条件
GROUP 分组
HAVING 包含聚合函数的过滤条件
ORDER BY 字段1, 字段2 (ASC / DESC)
LIMIT index, rows

SELECT 语句执行过程

  1. FROM语句,找到相应的表,多表进行笛卡尔积连接
  2. ON限制多表连接条件,进行多表连接。同时考虑左外LEFT/右外RIGHT连接,补充行
  3. WHERE过滤行
  4. GROUP BY 分组。HAVING 每组的满足条件
  5. SELECT查询字段,对列上进行过滤。若有DISTINCT,对数据去重
  6. ORDER BY对结果排序
  7. LIMIT进行分页