EXPLAIN 是mysql
解释select查询的一个关键字,可以很方便的用于调试
语法格式如下
EXPLAIN
tbl_name
或者:
EXPLAIN SELECT select_options
EXPLAIN 语句可以被当作 DESCRIBE
的同义词来用,也可以用来获取一个MySQL要执行的 SELECT 语句的相关信息。
EXPLAIN tbl_name 语法和 DESCRIBE tbl_name 或 SHOW COLUMNS FROM tbl_name 一样。
当在一个 SELECT 语句前使用关键字 EXPLAIN 时,MYSQL会解释了即将如何运行该 SELECT
语句,它显示了表如何连接、连接的顺序等信息。
以下信息为引用:
在explain我们所使用的sql的时候,经常会遇到using
filesort这种情况,原以为是由于有相同列值的原因引起,结果昨天看到公司的一个sql,跟同事讨论了下加上自己又做了一些测试,突然发现自己原来的想法是错误的。
首先,只有在order by 数据列的时候才可能会出现using filesort,而且如果你不对进行order
by的这一列设置索引的话,无论列值是否有相同的都会出现using filesort。因此,只要用到order by 的这一列都应该为其建立一个索引。
其次,在这次测试中,使用了一个稍微有点复杂的例子来说明这个问题,下面详细用这个例子说一下:
SELECT * FROM DB.TB WHERE ID=2222 AND FID IN (9,8,3,13,38,40) ORDER BY
INVERSE_DATE LIMIT 0, 5
里面建立的索引为一个三列的多列索引:IDX(ID,FID ,INVERSE_DATE)
。INVERSE_DATE这个是时间的反向索引。
对于这个sql我当时最开始认为应该是个优化好的状态,应该没有什么纰漏了,结果一explain才发现竟然出现了:Using where; Using
filesort。
为什么呢,后来经过分析才得知,原来在多列索引在建立的时候是以B-树结构建立的,因此建立索引的时候是先建立ID的按顺序排的索引,在相同ID的情况下建立FID按
顺序排的索引,最后在FID
相同的情况下建立按INVERSE_DATE顺序排的索引,如果列数更多以此类推。有了这个理论依据我们可以看出在这个sql使用这个IDX索引的时候只是用在了order
by之前,order by INVERSE_DATE 实际上是using
filesort出来的。。汗死了。。因此如果我们要在优化一下这个sql就应该为它建立另一个索引IDX(ID,INVERSE_DATE),这样就消除了using
filesort速度也会快很多。问题终于解决了。
分享到:
相关推荐
当我们看到`EXPLAIN`输出中的`Using filesort`,这意味着MySQL无法利用索引来对查询结果进行排序,而必须采用一种更耗时的全内存排序方法。这通常发生在`ORDER BY`子句中涉及的列没有合适索引或者`GROUP BY`操作无法...
然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`Using filesort`的原理及其在`ORDER BY`和`GROUP BY`中的应用。 1. **SQL执行顺序** 在一个SQL查询中...
MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,其性能优化是数据库管理员和开发人员的关键技能。在本篇文章中,我们将深入探讨"mysql+explain实例分析"这一主题,以理解如何利用`EXPLAIN`命令来优化MySQL...
### MySQL中EXPLAIN命令详解 #### 一、概述 在MySQL数据库管理中,查询优化是一项非常重要的工作。通过优化查询,不仅可以提升查询速度,还能节省系统资源,提高系统的整体性能。`EXPLAIN`命令作为MySQL提供的一种...
- **Using filesort**:表示 MySQL 需要使用额外的排序步骤来获取有序的结果集。 #### 三、EXPLAIN 的高级用法 - **Extended EXPLAIN**:除了基本的 EXPLAIN 之外,还可以使用 `EXPLAIN FORMAT=JSON` 或 `EXPLAIN...
10. Extra:额外的重要信息,常见且重要的有:using filesort(文件内排序,MySQL 无法用给定的索引进行排序,在内部重新排序)、using temporary(使用了临时表,一般在 group by 中),using index(最好的一种,...
MySQL中的`EXPLAIN`命令是用于分析SQL查询执行计划的重要工具,它可以帮助数据库管理员和开发者了解MySQL如何处理SQL语句,从而进行性能优化。在深入理解`EXPLAIN`之前,我们先来了解一下数据库优化的基本概念。 ...
如果`Extra`中出现`Using filesort`,说明MySQL可能需要额外步骤来排序结果,这也是一种性能瓶颈。 总之,MySQL的EXPLAIN工具是优化SQL查询性能的关键,通过分析其输出,我们可以找出查询的瓶颈,优化索引策略,...
- `using filesort`:表示MySQL需要对结果进行额外的排序步骤,这通常是低效的。 - `using index`:表示MySQL仅使用索引获取所有需要的数据,无需读取实际的表行。 - `using where`:表示使用了WHERE子句来限制...
### 深入解析:使用 EXPLAIN 优化 MySQL 查询之旅 #### 一、MySQL简介与特点 MySQL作为一款流行的开源关系型数据库管理系统(RDBMS),因其强大的功能与灵活性,在Web应用程序开发领域占据着举足轻重的地位。它不仅...
看到Extra中的Using filesort或Using temporary,意味着可能需要调整JOIN顺序或添加索引。 六、总结 掌握`EXPLAIN`工具的使用,是每个MySQL数据库管理员和开发者必备的技能。通过深入理解查询执行计划,我们可以更...
MySQL 查询优化的百科全书 —— Explain 详解 MySQL 是怎样运行的?从根儿上理解 MySQL 的查询优化是一件复杂的事情,但了解 Explain 语句输出的各个列的意思是非常重要的。本章将继续唠叨 Explain 语句输出的各个...
8. **Extra**:提供关于MySQL如何解析查询的额外信息,如`Using temporary`(使用临时表)、`Using filesort`(文件排序)等。 - **Using temporary**:表示MySQL需要创建临时表来存储中间结果,这可能导致性能下降...
- 注意`Extra`列中的`Using where`、`Using filesort`和`Using temporary`,这些都可能影响性能。 4. **实例代码** 下面的例子展示了如何使用EXPLAIN来分析查询: ```sql EXPLAIN SELECT * FROM t3 WHERE id = ...
在MySQL数据库管理系统中,“explain”是一个非常重要的关键字,它用于分析SQL查询的执行计划,帮助我们理解查询如何在数据库中运行,从而优化查询性能。在本文中,我们将深入探讨“explain”的使用及其对数据库性能...
通过对`EXPLAIN`输出的分析,我们可以识别出可能导致低效的查询,如全表扫描(`type`为ALL)、未使用索引(`key`为NULL)或不必要的排序(`Extra`中有Using filesort),并据此优化查询语句或调整索引策略。 总的来说,...