1、关于 MySQL 服务器,以下说法错误的是: B
A、MySQL 可以运行在 FreeBSD、Linux或Windows系统。
B、MySQL 的服务器和客户端必须运行在不同的计算机上。
C、MySQL 允许为不同用户指定不同的资源组。
D、MySQL 可以设置监听端口、地址和最大连接数。
2、MYSQL获取SQL的执行计划有哪些方式? ABD
A、desc + sql 语句
B、首先通过show processlist;获取线程ID;之后使用 EXPLAIN FOR CONNECTION 线程ID;获取执行计划。
C、explain plan for + sql 语句
D、explain + sql 语句
可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。
官网地址: https://dev.mysql.com/doc/refman/5.5/en/explain-output.html
MySql提供了EXPLAIN语法用来进行查询分析,在SQL语句前加一个”EXPLAIN”即可。
默认情况下Mysql的profiling是关闭的,所以首先必须打开profiling
set profiling=“ON”
mysql> show variables like “%profi%”;
---mysql 查看执行计划
1. MySQL可以使用explain 或 DESC预估的执行计划。
2. 对于正在执行的SQL语句,可以首先获取线程ID, 通过show processlist;
或者select * from information_schema.PROCESSLIST where info is not null order by time desc ;
之后通过EXPLAIN FOR CONNECTION 线程ID获取正在执行的执行计划。
1、执行计划中包含的信息
select查询的序列号,包含一组数字,表示查询中执行select子句或者操作表的顺序
id号分为三种情况:
1、如果id相同,那么执行顺序从上到下
explain select * from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal;
2、如果id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
explain select * from emp e where e.deptno in (select d.deptno from dept d where d.dname = 'SALES');
3、id相同和不同的,同时存在:相同的可以认为是一组,从上往下顺序执行,在所有组中,id值越大,优先级越高,越先执行
explain select * from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal where e.deptno in (select d.deptno from dept d where d.dname = 'SALES');
主要用来分辨查询的类型,是普通查询还是联合查询还是子查询




