MySQL大体上可分为Server层和存储引擎层两部分:
Server层
连接器 / 查询缓存 / 分析器 / 优化器 / 执行器 / 内置函数 / 存储 / 触发器 / 试图等
存储引擎层
数据的存储和提取 / 插件式 / InnoDB(>5.5 默认)/ MyISAM / Memory
连接器
- 负责与客户端建立连接、获取权限、维持和管理链接。
- 成功建立连接后,即使修改权限也要重新连接后才能生效。
- 连接太久无操作会自动断开。
my.cnf 配置,默认 8 小时,单位为秒
wait_timeout = 28800
连接方案:
- 尽量使用长连接
- 定期断开长连接
- 大于 5.7 版本,执行 mysql_reset_connection 重新初始化连接资源。
查询缓存(了解)
MySQL 拿到查询请求后先查询缓存,如果存在 key,则直接将value返回客户端。
但大多数情况下建议关闭查询缓存,弊大于利。
临时的直接再命令行执行
>set global query_cache_size=0
>set global query_cache_type=0
永久的修改配置文件my.cnf ,添加下面的配置即可
query_cache_type=0
query_cache_size=0
MySQL 8.0 版本直接将该功能删掉了。
分析器
-
词法分析:先识别 SQL 关键字、表明、列明等,对具体的词进行识别
-
语法分析:是否满足 SQL 语法规则
优化器
- 决定索引选择
- 决定执行方案
执行器
- 判断执行权限
- 获取锁、打开表
- 获取数据、返回结果
注意没有索引的表按条件循环匹配