MySQL 基础架构

MySQL 基础架构:一条SQL查询语句如何执行

  • 连接器(管理连接、权限验证)
  • 查询缓存(5.7不推荐使用,8.0完全废弃)
  • 解析器(解析树)
  • 优化器(索引选择、表关联顺序、执行计划)
  • 执行器(调用存储引擎接口)
  • 执行引擎(InnoDB、MyISAM、Memory)

MySQL 分成Server层和存储引擎层两部分。

连接器

mysql -h<ip> -P<port> -u<user> -p

建立连接后,连接器会查询权限表。

  • 如果使用 GRANT/REVOKE 修改用户权限,权限会立即生效
  • 如果直接更新权限表,需要使用 FLUSH PRIVILEGES 或重新登录,权限才会生效

查看连接状态;默认连接空闲超过8小时会自动断开(由 wait_time 参数控制),断开后查询会收到 lost connection 错误

show processlist

长连接/短连接:在应用中应该尽量使用长连接,避免频繁建立断开连接的开销。

但是查询执行过程临时使用的内存是由连接对象管理的,所以长连接可能会占用大量内存问题

  • 定期断开连接或执行大查询后断开连接
  • MySQL 5.7 后可以通过 mysql_reset_connection 重新初始化资源,但不会重连和重做权限校验

查询缓存

缓存失效:只要对表进行更新,表上的所有查询缓存都会被清空。

按需使用缓存,设置参数 query_cache_type=demand 后查询默认不进行缓存,使用缓存需要显示指定 SQL_CACHE

select sql_cache * from table

MySQL 8.0 移除查询缓存功能

分析器

分析器:进行词法分析和语法分析,生成解析树。

优化器

优化器:索引选择、表关联顺序、生成执行计划

查看执行计划

explain select * from table

执行器

解析器执行后会校验用户有没有表权限(precheck),执行器在执行时会在此之前校验用户有没有表权限(触发器、存储过程等一些在运行时涉及的表)

慢日志中的 rows_examined(扫描行数),就是在每次调用存储引擎接口是累加的。

posted @ 2024-10-13 16:25  廖子博  阅读(4)  评论(0编辑  收藏  举报