数据库
首页 > 数据库> > 服务化-mysql-05 索引优化及Explain实践详解

服务化-mysql-05 索引优化及Explain实践详解

作者:互联网

Explain实践优化详解

Explain是mysql提供的针对查询语句模拟优化的工具,可以针对输出的结果进行有效分析。
mysql8.0Explian官网地址
https://dev.mysql.com/doc/refman/8.0/en/explain-output.html

建几张表备用

CREATE TABLE `actor` (
  `id` int NOT NULL,
  `name` varchar(45) DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

CREATE TABLE `film` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

CREATE TABLE `film_actor` (
  `id` int NOT NULL,
  `film_id` int NOT NULL,
  `actor_id` int NOT NULL,
  `remark` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_film_actor_id` (`film_id`,`actor_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

1、Explain结果集解析

随便执行一行查询语句,发现结果集中出现多列语义。id、select_type、table、type列等等。那其中各列的含义是什么?
在这里插入图片描述

1.1 id列

id列的编号是select序列号,id顺序是根据select出现的顺序排序的。

1.2 select_type列

select (select * from actor where id = 1) from (select * from xxx where x) der;

1.3 table列

表示当前explain行正在查询的表。

1.4 type列

type列是Explain中最为关键的列。

查询性能排序依次是:
system > const > eq_ref > ref > range > index > ALL

EXPLAIN SELECT * FROM film WHERE NAME='a';

在这里插入图片描述

EXPLAIN SELECT * FROM actor WHERE id>1;

在这里插入图片描述

-----------------------------------------------------------------------------以下为不及格的使用----------------------------------------------------------------------------
index:全表扫描整个二级索引的叶子节点(下述场景中,film表中所有字段均被索引或主键覆盖,此时会出现覆盖索引查询)

EXPLAIN SELECT * FROM film;

在这里插入图片描述
All:全表扫描聚集索引的叶子节点(actor表中的所有数据都要查到,包括非索引字段,此时最优的查询方案就是聚簇索引的全表扫描)

EXPLAIN SELECT * FROM actor;

在这里插入图片描述

1.5 possible_keys列

1.6 key列

1.7 key_len列

1.8 ref列

1.9 rows列

1.10 filtered列

1.1 Extra列

2、索引实践

标签:服务化,Explain,05,actor,查询,索引,NULL,id,select
来源: https://blog.csdn.net/csfun1/article/details/119986331