当程序执行一条查询语句时,MySQL内部到底发生了什么? (说一下 MySQL 执行一条查询语句的内部执行过程?
先来个最基本的总结阐述,希望各位小伙伴认真的读一下,哈哈: 1)客户端(运行程序)先通过 连接器 连接到MySql服务器。 2)连接器通过数据库权限身份验证后,会先查询数据库缓存是否存在(之前执行过相同条件的SQL查询),如果有会直接返回缓存中的数据。如果没有则会进入分析器。 3)进入 分析器 后会对查询语句进行词法语法的分析,判断该查询语句SQL是否存在语法错误,如果存在查询语法词法错误,会直接返回给客户端错误,如果正确则会进入优化器。 4) 优化器 会对查询语句进行优化处理:例如:如果一条语句用到了多个索引会判断哪个索引性能更好。 5)最终会进入 执行器 ,开始执行查询语句直到查询出满足条件的所有数据,然后进行返回。 下面我们详细的来说一 下: 假如说我们有一张 User 表 ,表里只有一个字段 ID ,当我们执行下边这条SQL语句时: mysql> select * fron T where ID = 10; 在我们眼中能看到的只是输入一条 SQL语句,返回一条查询结果,却不曾知道这条SQL在MySQL的内部经历了什么,下面我们来一步一步的分析一下;如下是MySQL的基本架构图,从图中可以清楚的看到SQL在MySQL中各个功能模块执行的过程: 大体来说,MySQL可以分为 Server层 和 存储引擎 两部分。 Server层:包括连接器、分析器、查询缓存、优化器、执行器等。