MYSql 之 explain解析

文章讲述了在项目开发中遇到查询历史表大量数据的问题,原始SQL查询耗时长。作者通过explain分析发现,关键在于检查SQL的索引使用情况,包括key、key_len、type和Extra等参数,以定位和优化查询性能。

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

#背景

在项目开发中,给我安排一个新的任务,任务简单做是要查询历史表有没有这条数据,历史表的数据每天都会更新,是迭代递增更新,当前表的数据全部插入到历史表中,表里的主键是日期,随着日积月累的归档更新,历史表的数据量会达到百万级别,没有分表,也没有分库的处理,只能硬查表。

简单查询了一下sql(根据日期过滤),发现查询200万条需要35秒,如此耗时肯定是不行的。

正文:

于是决定使用explain,查询看下sql 查询的索引信息。explain  +sql语句 能更好的帮助开发人员分析问题,expliain 能显示MYsql该如何使用,可以写出更优化的sql查询语句。

会看到返回10个参数,

idsleect标识符,select查询序列号,
selec_typeselect 语句的类型 普通查询,联合查询,子查询等
table 表示这行的数据查的哪个表
partitions展示查询访问的分区
type(重要)访问级别不同的结果,表示查询的查询的等级好坏
key(重要)实际用的索引,
key_len索引长度
ref表示索引命中的列或者常量
rowmysql认为执行查询必须检查的行数
filtered表示按表条件过滤的表行的估计百分比,最大100,表示未过滤行
Extra包含解析查询的其他信息

这10个字段信息,表示的含义还挺重要的,不过常用的数据信息,

key :查看有没有使用索引

key_len :查看索引的使用是否充分

type:查看索引类型

Extra :查看附件信息,如:排序、临时表、where 条件为false等

一般情况下根据这四个就能定位索引问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值