1.mysql逻辑组成
服务端+存储引擎
2.请求流程
3.服务端组成
连接器 -> 缓存 -> 分析器 -> 优化器 -> 执行器
4.连接器
4.1 作用
负责服务端和客户端建立连接,完成TCP握手后,认证身份,成功建立连接
4.2 注意点
1.若用户已经建立连接,在此期间修改用户的权限不会生效,需要重新连接后才生效
2.客户端默认休眠8小时后自动断开连接,由wait-timeout参数控制
3.使用showprocesslist命令可以查看已经建立连接的客户端及其状态
4.3 长连接问题
1.描述:当客户端连接后,建立长连接可以使所有请求都是用该连接,减少连接的开销
2.带来的问题:若用户长时间建立连接,会导致占用内存过大,可能会导致OOM情况
3.解决方式:定期断开长连接、执行mysql_reset_connection命令初始化连接资源
5.查询缓存
5.1缓存的结构
执行过的查询会以key-value的形式缓存在内存中,key为sql语句,value为查询结果
5.2缓存的弊端
当对表有更新操作时,所有跟次表有关的缓存都将清空,这样查询缓存的效率就会非常低,因此推荐不使用缓存,或者说不常更新的表使用缓存
5.3显式使用缓存
select SQL_CACHE * from table
5.4禁用缓存的指令
query_cache_type = DEMAND
6.分析器
6.1作用
分析语句的语法,看是否符合mysql的语法规则
7.优化器
7.1作用
假如有语句:select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;
可以用两种执行方式
1.既可以先从表t1里面取出c=10的记录的ID值,再根据ID值关联到表t2,再判断t2里面d的值是 否等于20。
2.也可以先从表t2里面取出d=20的记录的ID值,再根据ID值关联到t1,再判断t1里面c的值是否 等于10。
优化器的作用就是分析那种执行方式的执行效率更高