发布网友 发布时间:2024-10-23 22:13
共1个回答
热心网友 时间:2024-11-08 21:18
MySql学习》 SQL 语句的执行过程
MySql架构分为逻辑架构和引擎架构。逻辑架构包括Server层与engine层,其中Server层分为连接器、缓存、分析器、优化器、执行器五部分,而engine层由不同的存储引擎组成。
连接器负责与客户端建立、获取和维护连接,通过指定参数如-h IP和-p端口进行。连接成功后,系统会显示欢迎信息和当前版本号。若密码验证失败,则会显示错误信息。
权限缓存在用户密码验证通过后获取当前登录用户的权限信息,并将其缓存起来,即使用户的权限被修改,只要未断开连接,用户依旧保持旧权限。通过创建用户、分配权限、登录等操作来演示权限变化过程。在连接时,用户只能看到自己有权限的数据库。
长连接和短连接描述了连接的使用方式,长连接在客户端有请求时持续使用同一连接,而短连接则在完成查询后断开连接。MySQL默认会在8小时后自动断开未操作的长连接,可以通过命令查看当前设置的超时时间。在长连接管理上,使用mysql_reset_connection()函数可重置所有连接,但会中断业务。
查询缓存是连接建立后的下一个环节,用于查找之前执行的SQL语句及其结果。在MySQL 8.0版本后,查询缓存被移除,因为其存在的价值不大。数据变更导致表缓存失效,因此缓存的维护成本超过其价值,仅适用于静态配置表。
分析器阶段,MySQL分析器执行词法分析和语法分析,确保SQL语句符合规范。如果查询不存在的列,将在此阶段抛出异常。表的元数据不存储在引擎中。
优化器通过分析器确定SQL语句的执行方式,并提供优化方案,决定使用更高效的执行路径。经过优化器后,SQL语句进入执行器阶段,执行器通过连接时获取的权限判断是否有对表的操作权限。如果有权限,则调用存储引擎接口执行语句。
执行流程中,如果查询的字段没有索引,执行器将直接查询对应表,执行效率可能较低。在整体执行过程中,权限验证、缓存查找、查询解析、优化选择、存储引擎调用等环节紧密相连,确保SQL语句的高效执行。