`

Using filesort

阅读更多
只有在order by 数据列的时候才可能会出现using filesort,而且如果你不对进行order by的这一列设置索引的话,无论列值是否有相同的都会出现using filesort。


Using filesort表示在索引之外,需要额外进行外部的排序动作。导致该问题的原因一般和order by有者直接关系,一般可以通过合适的索引来减少或者避免

explain SELECT * FROM table_item WHERE user_id = 2 ORDER BY item_id LIMIT 0, 5
user_id 和 item_id 分别建立一个索引,对此语句MySQL选择了 user_id索引,那么 item_id 的索引没有起到任何用处。当排序时记录数较多,内存中的排序 buffer满了,只能 Using filesort 进行外部排序。
解决方式为对这两列建立组合索引。

explain SELECT * FROM table_item WHERE user_id = 2 and user_age > 20 ORDER BY item_id LIMIT 0, 5
建立组合索引(user_id, user_age, item_id),看似非常完美。但由于user_age规则不是确定值,使用该组合索引的话实际上需要先按索引找出一个个user_age下的东西后再对其进行排序,仍然会filesort。
解决方式是使用组合索引(user_id, item_id),对排序好的item_id再过滤到不满足user_age > 20的条目,不会出现filesort。
分享到:
评论

相关推荐

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

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

    Mysql之EXPLAIN显示using filesort介绍

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

    108 透彻研究通过explain命令得到的SQL执行计划(9).pdf

    在这份文档中,我们重点了解两种执行计划中的常见项:Using filesort和Using temporary,以及它们对性能的影响。 首先,Using filesort是指当优化器发现无法直接利用索引进行排序时,它需要将数据写入到一个临时...

    mysql索引优化学习讲义以及示例

    **Case 3.1**和**Case 3.2**:说明在使用索引排序时,如果排序列不是连续的,可能会导致“Using filesort”现象,意味着MySQL需要进行额外的排序操作。 **Case 4**:在这个例子中,查询只使用了c1索引,而c2和c3...

    mysql索引优化深入1

    在深入理解索引优化的过程中,我们需要关注几个核心概念,如索引类型、键长度(key_len)、参考值(ref)以及全表扫描(type=ALL)和文件排序(Using filesort)。 首先,创建了一个名为`test`的表,包含五个...

    MySql优化 自已总结

    - `Extra`: 其他信息,如Using where, Using index, Using filesort等。 `Extra`列中的信息非常重要,例如`Using where`表示WHERE条件用于索引,而`Using filesort`则表示数据必须进行额外的排序操作,这通常会导致...

    MySQL优化篇:排序分组优化.pdf

    5. using filesort:当无法利用索引排序时,解释(explain)查询计划会显示“using filesort”,表示进行了手工排序。 关于group by分组优化,其优化原理与order by相似。group by语句通常用于分组统计,例如按照...

    Explain详解与索引最佳实践.pdf

    10. **extra** 列:提供关于MySQL如何优化查询的其他信息,如`Using where`、`Using index`、`Using temporary`、`Using filesort`等。`Using index`表示使用了覆盖索引,而`Using filesort`表示数据需要额外排序,...

    Mysql设计与优化专题1

    - `Extra`:提供有关查询执行的附加信息,如`Using where`、`Using index`等,`Using filesort`表示MySQL需要进行额外的排序步骤,这通常是需要优化的地方。 在优化查询时,关注`type`列尤为关键。如果查询类型是`...

    explain的用法

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

    Explain详解与索引最佳实践1

    10. **Extra**:此列提供了关于MySQL如何处理查询的额外信息,比如“Using index”表示使用了覆盖索引,“Using where”表示WHERE子句被用到了,“Using temporary”和“Using filesort”分别表示是否使用了临时表和...

    MySql优化.pdf

    - `Extra`:其他信息,如Using where、Using filesort等,后者表示需要进行额外的排序操作。 通过对`EXPLAIN`输出的分析,我们可以识别出可能导致低效的查询,如全表扫描(`type`为ALL)、未使用索引(`key`为NULL)或...

    Mysql中explain的说明

    - 其中常见的关键词如Using where、Using index、Using temporary、Using filesort等。 #### 四、Extra列的含义详解 1. **Distinct**: - 表示一旦MySQL找到了与行相匹配的行,就不再继续搜索了。 2. **Not ...

    mysql+explain实例分析

    10. **Extra**:包含MySQL解决查询的额外信息,如“Using where”、“Using filesort”和“Using temporary”。 通过分析`EXPLAIN`的结果,我们可以发现查询优化的机会。例如,如果看到"Using filesort",表示MySQL...

    Mysql 调优详解与实践案例

    10. **Extra**:额外信息,如Using index(使用了覆盖索引),Using where(使用了WHERE子句),Using filesort(需要进行文件排序)等。 ### `EXPLAIN`的扩展形式 1. **explain extended**:提供更详细的信息,如...

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

    * Using filesort:当查询使用了文件排序时,将会提示该额外信息。 了解 Explain 语句输出的各个列的意思,可以帮助我们更好地理解 MySQL 是怎样运行的,并帮助我们进行查询优化。但是,需要注意的是,Explain 语句...

    MySQL explain 笔记整理

    - 当 `Extra` 列出现 `Using filesort` 或 `Using temporary` 时,通常意味着需要调整查询逻辑或增加索引来减少排序和临时表的使用。 - 如果 `possible_keys` 列列出了多个索引,但 `key` 列只使用了一个索引,应...

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

    - **额外信息**:`Extra`列包含了更多关于执行过程的信息,例如使用了临时表(`Using temporary`)或文件排序(`Using filesort`)等,这些信息对于进一步优化查询至关重要。 #### 三、实战示例 假设我们有一个查询...

    SQL优化指南.docx

    - **误区5**: 认为执行计划中的`Using filesort`意味着会进行磁盘文件排序。 - **解释**: - `Using filesort`仅表示需要排序操作,不一定涉及磁盘文件排序。 - 可以通过其他方式优化排序操作,例如利用索引或限制...

Global site tag (gtag.js) - Google Analytics