MySQL 实战 45 讲 Part1
MySQL 实战 45 讲 | 林晓斌 01 | 基础架构:一条 SQL 查询语句是如何执行的? 连接器:跟客户端建立连接、获取权限、维持和管理连接。 SHOW PROCESSLIST; 137462239 db 10.135.4.7:41261 db Query 0 starting show processlist -- 一个空闲连接 137462293 db 10.130.128.1:47174 db Sleep 24 -- 客户端如果太长时间没动静,连接器就会自动将它断开 select @@wait_timeout; show variables like 'wait_timeout'; -- 28800 8h 通过执行 mysql_reset_connection 来重新初始化连接资源,这是个接口函数,不是一个 SQL 语句。 查询缓存:不建议使用。在一个表上有更新的时候,跟这个表有关的查询缓存都会失效。 select @@query_cache_type; -- OFF sysvar_query_cache_type | mysql 分析器:词法分析、语法分析。进行分词和验证语法规则。解析器和预处理器。 解析器处理语法和解析查询,生成一课对应的解析树。 预处理器进一步检查解析树的合法。比如: 数据表和数据列是否存在,别名是否有歧义等。如果通过则生成新的解析树,再提交给优化器。 优化器:决定使用哪个索引,决定各个表的连接顺序。 执行器:有没有执行查询的权限,操作引擎,返回结果。执行器调用的次数(rows_examined)与引擎总共扫描行数可能是不等的,后文有例子。 读写、存取数据在 engine 引擎层,连接、鉴权、计算在 server 服务层。 ...