首先MYSQL是典型的C/S架构,即Client/Server架构,服务器端程序使用mysqld,主要包括三层:
- 连接层:客户端与服务端进行连接,客户端发送SQL给服务端;
- SQL层:对SQL进行查询处理;
- 存储引擎层:操作数据库文件,负责数据库的存储与读取;
SQL层的执行顺序;
- 查询缓存:如果查到之前有缓存,则直接返回结果,如果没有,进入下一步,因为效率太低,8.0之后去掉了这个功能;
- 解析器:对语句进行语法、语义分析;
- 优化器:确定sql的执行路径,比如全表检索、索引检索;
- 执行器:判断用户是否有权限,有权限就返回结果,如果是8.0以下的版本还会进行缓存;
收集mysql执行时所使用的资源情况:
select @@ profiling
如果=0代表关闭,以下代码打开:
set profiling=1
执行完一个语句之后,如下方式查看占用资源:
show profiles
也可以指定查询的query id,
show profile for query 2