`

Mysql之EXPLAIN显示using filesort [轉載]

阅读更多

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速度也会快很多。问题终于解决了。

分享到:
评论

相关推荐

    Mysql之EXPLAIN显示using filesort介绍

    当我们看到`EXPLAIN`输出中的`Using filesort`,这意味着MySQL无法利用索引来对查询结果进行排序,而必须采用一种更耗时的全内存排序方法。这通常发生在`ORDER BY`子句中涉及的列没有合适索引或者`GROUP BY`操作无法...

    【mysql知识点整理】— order by 、group by 出现Using filesort原因详解

    然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`Using filesort`的原理及其在`ORDER BY`和`GROUP BY`中的应用。 1. **SQL执行顺序** 在一个SQL查询中...

    mysql+explain实例分析

    MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,其性能优化是数据库管理员和开发人员的关键技能。在本篇文章中,我们将深入探讨"mysql+explain实例分析"这一主题,以理解如何利用`EXPLAIN`命令来优化MySQL...

    Mysql中explain的说明

    ### MySQL中EXPLAIN命令详解 #### 一、概述 在MySQL数据库管理中,查询优化是一项非常重要的工作。通过优化查询,不仅可以提升查询速度,还能节省系统资源,提高系统的整体性能。`EXPLAIN`命令作为MySQL提供的一种...

    MySQL explain 笔记整理

    - **Using filesort**:表示 MySQL 需要使用额外的排序步骤来获取有序的结果集。 #### 三、EXPLAIN 的高级用法 - **Extended EXPLAIN**:除了基本的 EXPLAIN 之外,还可以使用 `EXPLAIN FORMAT=JSON` 或 `EXPLAIN...

    mysql的explain分析sql语句性能(慢查询和加没加索引)

    10. Extra:额外的重要信息,常见且重要的有:using filesort(文件内排序,MySQL 无法用给定的索引进行排序,在内部重新排序)、using temporary(使用了临时表,一般在 group by 中),using index(最好的一种,...

    mysql explain详解

    MySQL中的`EXPLAIN`命令是用于分析SQL查询执行计划的重要工具,它可以帮助数据库管理员和开发者了解MySQL如何处理SQL语句,从而进行性能优化。在深入理解`EXPLAIN`之前,我们先来了解一下数据库优化的基本概念。 ...

    mysql explain详解1

    如果`Extra`中出现`Using filesort`,说明MySQL可能需要额外步骤来排序结果,这也是一种性能瓶颈。 总之,MySQL的EXPLAIN工具是优化SQL查询性能的关键,通过分析其输出,我们可以找出查询的瓶颈,优化索引策略,...

    mysql之explain使用详解(分析索引)

    - `using filesort`:表示MySQL需要对结果进行额外的排序步骤,这通常是低效的。 - `using index`:表示MySQL仅使用索引获取所有需要的数据,无需读取实际的表行。 - `using where`:表示使用了WHERE子句来限制...

    深入解析:使用EXPLAIN优化MySQL查询之旅

    ### 深入解析:使用 EXPLAIN 优化 MySQL 查询之旅 #### 一、MySQL简介与特点 MySQL作为一款流行的开源关系型数据库管理系统(RDBMS),因其强大的功能与灵活性,在Web应用程序开发领域占据着举足轻重的地位。它不仅...

    mysqlexplain-100712043803-phpapp01.ppt

    看到Extra中的Using filesort或Using temporary,意味着可能需要调整JOIN顺序或添加索引。 六、总结 掌握`EXPLAIN`工具的使用,是每个MySQL数据库管理员和开发者必备的技能。通过深入理解查询执行计划,我们可以更...

    MySQL 是怎样运行的:从根儿上理解 MySQL(下).pdf

    MySQL 查询优化的百科全书 —— Explain 详解 MySQL 是怎样运行的?从根儿上理解 MySQL 的查询优化是一件复杂的事情,但了解 Explain 语句输出的各个列的意思是非常重要的。本章将继续唠叨 Explain 语句输出的各个...

    explain的用法

    8. **Extra**:提供关于MySQL如何解析查询的额外信息,如`Using temporary`(使用临时表)、`Using filesort`(文件排序)等。 - **Using temporary**:表示MySQL需要创建临时表来存储中间结果,这可能导致性能下降...

    Mysql Explain 详细介绍

    - 注意`Extra`列中的`Using where`、`Using filesort`和`Using temporary`,这些都可能影响性能。 4. **实例代码** 下面的例子展示了如何使用EXPLAIN来分析查询: ```sql EXPLAIN SELECT * FROM t3 WHERE id = ...

    explain也是mysql的关键字

    在MySQL数据库管理系统中,“explain”是一个非常重要的关键字,它用于分析SQL查询的执行计划,帮助我们理解查询如何在数据库中运行,从而优化查询性能。在本文中,我们将深入探讨“explain”的使用及其对数据库性能...

    MySql优化.pdf

    通过对`EXPLAIN`输出的分析,我们可以识别出可能导致低效的查询,如全表扫描(`type`为ALL)、未使用索引(`key`为NULL)或不必要的排序(`Extra`中有Using filesort),并据此优化查询语句或调整索引策略。 总的来说,...

Global site tag (gtag.js) - Google Analytics