文章目录
为了提前了解 SQL 的性能,MySQL 提供了 explain 执行计划功能。它对分析和优化 SQL 语句十分有用,通过它可以看清执行过程的细节、优化器的选择,分析 SQL 的性能瓶颈,找到问题所在。
当需要对某条 SQL 查询语句进行分析和优化时,我们经常会使用 explain 命令 或 desc 命令进行操作,分析 SQL 语句时,explain 和 desc 的作用是一样的。
使用 explain 命令可以分析出 SQL 查询语句中索引的使用情况、扫描的行数、扫描的类型等等,以便帮助我们对索引和 SQL 语句进行优化。
使用方法
使用方法:在 SQL 查询语句前面,加上 explain 或 desc 即可。
为了便于演示,先创建测试数据:
CREATE TABLE `t` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户名称',
`city` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '所在城市',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '用户的状态: 1启用, 2禁用',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `name_city` (`name`,`city`) USING BTREE,
KEY `status` (`status`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='测试表';
INSERT t(`name`, `city`, `status`) VALUES
('jack', 'bj', '1'),
('rose', 'sh', '2'),
('jim', 'sz', '1'),
('robot', 'gz', '1'),
('niko', 'sz', '1'),
('alice', 'sh', '1');
然后,执行下面的语句:
explain select id from t where id=1;
分析结果如下:
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+-----