一、MySQL执行流程

概论:MySQL 可以分为 Server 层和存储引擎层两部分
select * from user where id = 2;
当执行以上一条 SQL 语句时,会产生以下几个步骤
  • 首先客户端会与 MySQL 的 Server 层的连接器建立连接,此时会校验权限,在连接器中也可以管理连接
  • 当连接完后,回来的 查询缓存 中查询数据是否存在,如果存在直接返回数据结果。
  • 当在 查询缓存 中没有命中数据,那么此时会进入 分析器,在分析器中会对要执行的语句进行词法和语法分析,在以上的语句中如果在 user 表中没有 id 这个字段,会报字段不存在,当出现错误时我们应该关注 near 附近的错误信息
  • 接下来来到 优化层 ,在优化层中 MySQL 会选择最优的执行方案
  • 最后到 执行层, 在开始执行语句的时候,MySQL 会先判断当前用户对该表是否有执行权限,没有权限则返回提示没有执行权限。当有权限时打开表继续执行,执行器会根据表定义的引擎,去使用这个引擎提供的接口。执行完后返回结果(当设置了缓存数据时,在查出结果后会将数据存到缓存中)。

注:
1、MySQL 一般使用的是长连接,如果客户端太长时间没有操作,连机器会自动断开,默认时间是 8 小时。

2、当使用过多的长连接是会导致 MySQL 占用特别多内存,当占用内存太大时会被系统强行杀掉。
解决该问题:
(1)、定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。
(2)、如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

猜你喜欢

转载自blog.csdn.net/z_ruitao/article/details/85346361