- 浏览: 160531 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (118)
- rest (2)
- spring (8)
- java proxy (1)
- linux (9)
- nginx (1)
- 加密算法 (2)
- jquery (3)
- hibernate (9)
- bootstrap (0)
- mysql (15)
- java (6)
- 应用服务器 (2)
- jdbc (3)
- js (3)
- springMVC (3)
- JAVA基础分类 (2)
- mycat (5)
- mybatis (0)
- drools规则引擎 (0)
- 压力测试工具 (1)
- 日志管理 (3)
- maven (3)
- 数据源 (1)
- kryo 序列化 (1)
- dubbo (3)
- com.google.common.collect 工具类 (2)
- memcache (2)
- jdk (1)
- 正则 (2)
- amoeba (1)
- 分布式事务 (2)
- html5 (1)
- spring-data-elasticSearch (2)
- shell脚本 (1)
- Elasticsearch (9)
- 设计模式 (2)
- NOSQL (1)
- hash算法 (4)
- 多线程 (0)
- 电商 (1)
- pinpoint (0)
最新评论
只有在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。
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 查询指定索引
2017-07-13 12:25 1015select * from course c f ... -
MYSQL 函数 游标
2017-05-15 20:23 559CREATE PROCEDURE `test`.`new_ ... -
mysql 查看数据库是否有写操作(通过mysqlbin)
2016-10-08 18:29 648/usr/local/mysql/bin/mysqlbin ... -
MySQL STRAIGHT_JOIN
2015-03-23 18:36 696MySQL STRAIGHT_JOIN STRAIGHT_JO ... -
mysql密码忘记后重置
2014-12-30 15:51 4901./etc/init.d/mysql stop 2.以安全模 ... -
show processlist status
2014-10-30 10:31 592After create This occurs when t ... -
mysql的tmp_table_size和max_heap_table_size
2014-10-29 17:34 935先说下tmp_table_size吧: 它规定了内部内存临时表 ... -
mysql 主从复制常见问题
2014-10-14 09:47 11721.问题一:主从复制, ... -
Mysql 表所查询
2014-09-23 10:09 552可以通过检查 table_locks_waited和table ... -
Mysql 语句避免重复插入 Insert Select Not Exist
2014-09-18 17:33 927插入数据时,如果为了避免重复插入,而不像通过两次Sql进 可以 ... -
mysql in not in exist not exist 区别
2014-09-17 19:59 3432Mysql In Not In 不对null 进行处理 如果子 ... -
MySQL小误区:关于set global sql_slave_skip_counter=N 命令
2014-09-17 19:22 479背景知识1: 在主 ... -
mysql 从数据库slave 状态为no的解决方法
2014-09-11 12:08 667从数据库的状态显示为如下 Slave_IO_Running ... -
MySQL里获取当前week、month、quarter的start_date/end_date
2014-08-12 19:35 761当前week第一天 select date_sub(cur ... -
mysql 日期计算
2014-08-06 18:04 0mysql date()函数 MySQL DATE_SUB() ...
相关推荐
然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`Using filesort`的原理及其在`ORDER BY`和`GROUP BY`中的应用。 1. **SQL执行顺序** 在一个SQL查询中...
当我们看到`EXPLAIN`输出中的`Using filesort`,这意味着MySQL无法利用索引来对查询结果进行排序,而必须采用一种更耗时的全内存排序方法。这通常发生在`ORDER BY`子句中涉及的列没有合适索引或者`GROUP BY`操作无法...
在这份文档中,我们重点了解两种执行计划中的常见项:Using filesort和Using temporary,以及它们对性能的影响。 首先,Using filesort是指当优化器发现无法直接利用索引进行排序时,它需要将数据写入到一个临时...
**Case 3.1**和**Case 3.2**:说明在使用索引排序时,如果排序列不是连续的,可能会导致“Using filesort”现象,意味着MySQL需要进行额外的排序操作。 **Case 4**:在这个例子中,查询只使用了c1索引,而c2和c3...
在深入理解索引优化的过程中,我们需要关注几个核心概念,如索引类型、键长度(key_len)、参考值(ref)以及全表扫描(type=ALL)和文件排序(Using filesort)。 首先,创建了一个名为`test`的表,包含五个...
- `Extra`: 其他信息,如Using where, Using index, Using filesort等。 `Extra`列中的信息非常重要,例如`Using where`表示WHERE条件用于索引,而`Using filesort`则表示数据必须进行额外的排序操作,这通常会导致...
5. using filesort:当无法利用索引排序时,解释(explain)查询计划会显示“using filesort”,表示进行了手工排序。 关于group by分组优化,其优化原理与order by相似。group by语句通常用于分组统计,例如按照...
10. **extra** 列:提供关于MySQL如何优化查询的其他信息,如`Using where`、`Using index`、`Using temporary`、`Using filesort`等。`Using index`表示使用了覆盖索引,而`Using filesort`表示数据需要额外排序,...
- `Extra`:提供有关查询执行的附加信息,如`Using where`、`Using index`等,`Using filesort`表示MySQL需要进行额外的排序步骤,这通常是需要优化的地方。 在优化查询时,关注`type`列尤为关键。如果查询类型是`...
8. **Extra**:提供关于MySQL如何解析查询的额外信息,如`Using temporary`(使用临时表)、`Using filesort`(文件排序)等。 - **Using temporary**:表示MySQL需要创建临时表来存储中间结果,这可能导致性能下降...
10. **Extra**:此列提供了关于MySQL如何处理查询的额外信息,比如“Using index”表示使用了覆盖索引,“Using where”表示WHERE子句被用到了,“Using temporary”和“Using filesort”分别表示是否使用了临时表和...
- `Extra`:其他信息,如Using where、Using filesort等,后者表示需要进行额外的排序操作。 通过对`EXPLAIN`输出的分析,我们可以识别出可能导致低效的查询,如全表扫描(`type`为ALL)、未使用索引(`key`为NULL)或...
- 其中常见的关键词如Using where、Using index、Using temporary、Using filesort等。 #### 四、Extra列的含义详解 1. **Distinct**: - 表示一旦MySQL找到了与行相匹配的行,就不再继续搜索了。 2. **Not ...
10. **Extra**:包含MySQL解决查询的额外信息,如“Using where”、“Using filesort”和“Using temporary”。 通过分析`EXPLAIN`的结果,我们可以发现查询优化的机会。例如,如果看到"Using filesort",表示MySQL...
10. **Extra**:额外信息,如Using index(使用了覆盖索引),Using where(使用了WHERE子句),Using filesort(需要进行文件排序)等。 ### `EXPLAIN`的扩展形式 1. **explain extended**:提供更详细的信息,如...
* Using filesort:当查询使用了文件排序时,将会提示该额外信息。 了解 Explain 语句输出的各个列的意思,可以帮助我们更好地理解 MySQL 是怎样运行的,并帮助我们进行查询优化。但是,需要注意的是,Explain 语句...
- 当 `Extra` 列出现 `Using filesort` 或 `Using temporary` 时,通常意味着需要调整查询逻辑或增加索引来减少排序和临时表的使用。 - 如果 `possible_keys` 列列出了多个索引,但 `key` 列只使用了一个索引,应...
- **额外信息**:`Extra`列包含了更多关于执行过程的信息,例如使用了临时表(`Using temporary`)或文件排序(`Using filesort`)等,这些信息对于进一步优化查询至关重要。 #### 三、实战示例 假设我们有一个查询...
- **误区5**: 认为执行计划中的`Using filesort`意味着会进行磁盘文件排序。 - **解释**: - `Using filesort`仅表示需要排序操作,不一定涉及磁盘文件排序。 - 可以通过其他方式优化排序操作,例如利用索引或限制...