基础架构
客户端
Server层
- 连接器
管理连接,连接命令
mysql -h127.0.0.1 -P3306 -uroot -p
- 权限校验
- 一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。
- mysql数据库(系统数据库)下的表:user、db、tables_priv、columns_priv、proce_priv、proxies_priv共同构成授权表。
- 查询缓存
执行的语句及其结果会以 key-value 对的形式,被直接缓存在内存中。
#设置query_cache_type = DEMAND select SQL_CACHE * from T where id=1;
- 分析器
- 词法分析,语法分析。
分析器先会做“词法分析”。你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。
做完了这些识别以后,就要做“语法分析”。根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法。
- 优化器
- 执行计划生成,索引选择。
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。
- 执行器
- 操作引擎,返回结果。
开始执行的时候,要先判断一下你对这个表 table 有没有执行查询的权限,如果没有,就会返回没有权限的错误;
如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。
存储引擎(//TODO索引详解)
- innodb
- myisam
- memory usage
总结
本章介绍了 MySQL 的逻辑架构,希望读者对一个SQL语句完整执行流程的各个阶段有了一个初步的概念。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。