filesort是什么意思?

我们碰到有order by 或者group by,或者distinct语句的时候,如果查看执行计划,通常会看到using filesort的字眼,那么这个filesort是不是真是文件排序呢?其实不然,filesort和file没有一点关系,只是不好的代名词。如果一个语句不能在索引上完成排序,那么就是filesort.确切地说filesort应该被叫做sort,是一种快速排序。

我们可以查看这篇文章How MySQL executes ORDER BY

时间: 2024-10-06 19:49:56

filesort是什么意思?的相关文章

EXPLAIN sql优化方法(2) Using temporary ; Using filesort

优化GROUP BY语句   默认情况下,MySQL对所有GROUP BY col1,col2...的字段进行排序.这与在查询中指定ORDER BY col1,col2...类似.因此,如果显式包括一个包含相同的列的ORDER BY子句,则对MySQL的实际执行性能没有什么影响. 如果查询包括GROUP BY 但用户想要避免排序结果的消耗,则可以指定ORDER By NULL禁止排序,例如:explain select id, sum(moneys) from sales2 group by i

Using temporary和Using filesort分析

mysql> show create table t1; +-------+---------------------------------- | Table | Create Table                                             +-------+-------------------------------- | t1    | CREATE TABLE `t1` (  `id` int(11) NOT NULL DEFAULT '0',  `

MySQL 调优 -- Using filesort

出现这个问题的原因在于 MySQL 每次查询只能使用一个索引, 而你的 SQL 语句 WHERE 条件和 ORDER BY 的条件不一样, 索引没建好的话, 那么 ORDER BY 就使用不到索引, 出现了 Using filesort 问题. 解决这个问题就是建立一个包含 WHERE 和 ORDER BY 条件的混合索引. 比如原来 SQL 语句是: SELECT * FROM user u where u.id=100 order by u.update_time 而索引是 idx_user

转载(MySQL Order By实现原理分析和Filesort优化)

在MySQL中的ORDER BY有两种排序实现方式: 1.利用有序索引获取有序数据 2.文件排序 在使用explain分析查询的时候,利用有序索引获取有序数据显示Using index.而文件排序显示Using filesort. 1.利用有序索引获取有序数据 取出满足过滤条件作为排序条件的字段,以及可以直接定位到行数据的行指针信息,在 Sort Buffer 中进行实际的排序操作,然后利用排好序的数据根据行指针信息返回表中取得客户端请求的其他字段的数据,再返回给客户端. 这种方式,在使用exp

MySQL Using temporary; Using filesort INNER JOIN优化

问题 通过「SHOW FULL PROCESSLIST」语句很容易就能查到问题SQL,如下: SELECT post.* FROM post INNER JOIN post_tag ON post.id = post_tag.post_id WHERE post.status = 1 AND post_tag.tag_id = 123 ORDER BY post.created DESC LIMIT 100 说明:因为post和tag是多对多的关系,所以存在一个关联表post_tag. 试着用E

MySQL 调优 —— Using filesort

出现这个问题的解决办法在于 MySQL 每次查询仅仅能使用一个索引, 而你的 SQL 语句 WHERE 条件和 ORDER BY 的条件不一样, 索引没建好的话. 那么 ORDER BY 就使用不到索引. 出现了 Using filesort 问题. 解决问题就是建立一个包括 WHERE 和 ORDER BY 条件的混合索引. 比方原来 SQL 语句是: SELECT * FROM user u where u.id=100 order by u.update_time 而索引是 idx_use

mysql using filesort Using temporary

using filesort 一般人的回答是: "当行数据太大,导致内存无法容下这些数据产生的临时表时,他们就会被放入磁盘中排序."  很不幸,这个答案是错的 ,临时表在太大的时候确实会到磁盘离去,但是EXPLAIN不会显示这些. The truth is, filesort is badly named. Anytime a sort can't be performed from an index, it's a filesort. It has nothing to do wit

MySQL优化order by导致的 using filesort

using filesort 一般出现在 使用了 order by 语句当中. using filesort不一定引起mysql的性能问题.但是如果查询次数非常多,那么每次在mysql中进行排序,还是会有影响的. 这里的优化方式是在order by 的字段建立索引,例如 语句: SELECT * FROM yw_syjgb  ORDER BY result_date desc LIMIT 0,1000; 查看执行计划: +----+-------------+----------+------+

mysql group by using filesort优化

原join 连接语句 SELECT SUM(video_flowers.number) AS num,video_flowers.flower_id,flowers.title,flowers.imageFROM`video_flowers` JOIN`flowers` ON `video_flowers`.`flower_id` = `flowers`.`id` JOIN`video_posts` ON `video_flowers`.`video_post_id` = `video_post