当向MySQL发送一个请求时,MySQL做了什么:
- 客户端发送一条查询给服务器。
- 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。
- 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划
- MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询
- 将结果返回给客户端。
SELECT语句 - 语法顺序:
-
FROM <表名> # 选取表,将多个表数据通过笛卡尔积变成一个表。
-
JOIN<join, left join, right join...> <join表> # 指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中
-
ON <筛选条件> # 对笛卡尔积的虚表进行筛选
-
WHERE <where条件> # 对上述虚表进行筛选
-
GROUP BY <分组条件> # 分组 <SUM()等聚合函数> # 用于having子句进行判断,在书写上这类聚合函数是写在having判断里面的
-
HAVING <分组筛选> # 对分组后的结果进行聚合筛选
-
SELECT <返回数据列表> # 返回的单列必须在group by子句中,聚合函数除外
-
DISTINCT 数据除重
-
ORDER BY <排序条件> # 排序
-
LIMIT <行数限制>
参考资料
《高性能MySQL》(第3版)
5分钟快速掌握阿里内部MySQL性能优化的核心技术!
网友评论