基础知识
一条sql是如何执行的
连接器
连接到数据库上的时候使用,
mysql -h$ip -P$port -u$user -p
show processlist 来查看当前的连接,如果command 是sleep就是空闲连接
客户端长时间没有动作会自动断开,默认时间是 8 小时 ,再查询就是
Lost connection to MySQL server during query
需要重新连接
长连接和短连接
长连接:连接成功不断开,再有请求一直用
短连接:连接查询就断开
选择哪种连接
选择长连接,因为连接的建立比较复杂,所以尽量减少连接的建立。
长连接会带来什么问题
mysql内存会涨的特别快。
原因:mysql执行中临时内存是管理在连接对象里的,只有连接断开后才会释放。
如果长期积累下来,会导致 OOM
如何解决长连接的问题
- 定期断开。在程序里加个判断,一段时间后就断开重连
- mysql5.7 以后,mysql_reset_connection 命令初始化连接。不会断开和认证,会将连接恢复到初始状态。
查询缓存
查询语句和结果,采用key-value的形式存放,select 查询之前先看缓存,有的话直接返回。
为什么不建议使用缓存
失效频繁。有一个表有改动,这个表上所有的缓存都会清空。
对于更新频繁的,缓存命中太低
mysql有一种按需使用的方法。
select SQL_CACHE * from T where ID=10;
mysql8.0正式移除了缓存模块。
分析器
词法分析:别出里面的字符串分别是什么,代表什么。
语法分析:输入的这个 SQL 语句是否满足 MySQL 语法
优化器
- 在表里面有多个索引的时候,决定使用哪个索引
- 多表关联(join)的时候,决定各个表的连接顺序
执行器
执行前先判断是否有权限
执行调用表的存储引擎
4325

被折叠的 条评论
为什么被折叠?



