一条sql语句是怎样执行的
select * from user id = 1
一、客户端和连接器建立链接
mysql是进行TCP协议连接的需要三次握手进行连接
二 连接器校验身份
连接器 进行用户的身份和权限进行校验
成功 保存信息 进行下一步操作
失败 返回错误信息 给客户端
关于连接器的问题总结:
如何查看客户端有多少个?
show processlist; # 这个命令可以查看客户端连接个数
如果连接处于空闲状态会一直占用连接器资源吗?
mysql定义了最大空闲连接时间 wait_timeout
通过这个参数控制默认是8个小时,如果空闲超过八小时就会断开连接
链接数量有限制嘛?
可以通过max_connections参数来控制数量
如何解决连接长期占用问题?
- 定期断开长连接
- 客户端主动重置链接
三、解析SQL语句
- 对sql进行词法分析,如果语法有误返回给客户端报错信息
- 成功进行下一步
四、执行sql语句
- 对sql语句进行预处理
- 优化器对sql进行优化
- 执行器执行sql语句
五 返回给客户端数据
参考https://xiaolincoding.com/mysql