如何使用explain关键字优化SQL

本文深入探讨了SQL查询的优化技巧,通过explain命令详细解析了MySQL如何利用索引处理select语句,帮助读者理解查询执行计划,选择更优的索引策略,提升数据库查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

通常我们使用SQL查询是如何判断SQL的健康程度呢?我们会根据SQL查询时间来判断快慢,还有别的方法吗?

简介

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句

使用

EXPLAIN SELECT * FROM tb_account_user WHERE ID=1------------------------------------------------------------------------------------------------------    id  select_type  table            type    possible_keys  key     key_len  ref       rows  Extra   ------  -----------  ---------------  ------  -------------  ------  -------  ------  ------  --------     1  SIMPLE       tb_account_user  system  PRIMARY        (NULL)  (NULL)   (NULL)       1    

EXPLAIN列的解释

id

表示查询(select)的类型:simple(简单表),primary(主查询),union(union中的第二个或者是后面的查询语句),subquery(子查询第一个查询)

select_type

SELECT类型,可以为以下任何一种:

● SIMPLE:简单SELECT(不使用UNION或子查询)

● PRIMARY:最外面的SELECT

● UNION:UNION中的第二个或后面的SELECT语句

● DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询

● UNION RESULT:UNION 的结果

● SUBQUERY:子查询中的第一个SELECT

● DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询

● DERIVED:导出表的SELECT(FROM子句的子查询)

table

输出结果集的表

type

表示表中查找所需的行的方式

● type=ALL,全表扫描,遍历全表来找到匹配的行

● type=index 索引全扫描,遍历整个索引来查询匹配的行

● type=range 索引范围扫描,常见于>,>=,<,<=,between等操作符

● type=ref 使用非唯一索引扫描或者唯一索引的前缀扫描,返回匹配某个单独值的记录行

● type=eq_ref 使用的唯一就是唯一索引

● type=const/system 单表中最多有一个匹配行

● type=null 不用访问表或者索引,直接能够得到结果

● type=ref_or_null 查询包含null的查询

● type=index_merge 索引合并优化

● type=unique_subquery  in的后面是一个查询主字段的数据

● type=index_subquery in在后面查询非唯一索引字段的子查询

possible_keys

查询中可能使用的索引

key

表示查询索引

key_len

索引的长度

rows

扫描中的数量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值