推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Redis】
总结——》【Kafka】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
总结——》【Linux】
总结——》【MongoDB】
总结——》【Elasticsearch】
Mysql——》explain执行计划
参考链接:官网explain-output
为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。
一、概念
一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个执行计划,从而知道MySQL是如何处理SQL语句的。
这个执行计划展示了具体执行查询的方式:
- 多表连接的顺序是什么
- 对于每个表采用什么访问方法来具体执行查询
二、语法
1、适用SQL
SELECT,DELETE,INSERT,REPLACE、UPDATE
2、输出格式FORMAT
输出格式 | 以哪种格式显示输出 | 是否默认 |
---|---|---|
TRADITIONAL | 表格 | 是 |
JSON | JSON | 否 |
3、示例
在SQL查询的前面加上EXPLAIN关键字
-- 普通表:以表格格式显示输出
explain select * from course;
-- 普通表:以JSON格式显示输出
explain format = json select * from course;
-- 分区表:以表格格式显示输出
explain partitions select * from course;
EXPLAIN FORMAT = json select * from student where age >=3 and age <=10 and name like '%a%';
4、测试数据
-- 3张表:course、teacher、teacher_contact
DROP TABLE IF EXISTS course;
CREATE TABLE `course` (
`cid` INT ( 3 ) DEFAULT NULL,
`cname` VARCHAR ( 20 ) DEFAULT NULL,
`tid` INT ( 3 ) DEFAULT NULL )
ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
DROP TABLE IF EXISTS teacher;
CREATE TABLE `teacher` (
`tid` INT ( 3 ) DEFAULT NULL,
`tname` VARCHAR ( 20 ) DEFAULT NULL,
`tcid` INT ( 3 ) DEFAULT NULL )
ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
DROP TABLE IF EXISTS teacher_contact;
CREATE TABLE `teacher_contact` (
`tcid` INT ( 3 ) DEFAULT NULL,
`phone` VARCHAR ( 200 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
INSERT INTO `course` VALUES ( '1', 'mysql', '1' );
INSERT INTO `course` VALUES ( '2', 'jvm', '