MySQL在数据量过大导致无法使用索引时会发生file sort吗?

2026-05-22 22:470阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1149个文字,预计阅读时间需要5分钟。

看了许多排名靠前的博客,发现很多都讲错了!我开始按照博客来操作,没有怀疑,直到自己试了一下才发现是错的。在面试中有时会遇到关于 `file sort` 的问题,这个实际操作区域能否真实反映问题呢?

看了网上很多排名很靠前的博客,发现好多都讲错了!我开始按照博客来,没有怀疑,直到自己试了一下才发现是错的。file sort在面试中有时候会问到,这个其实挺能区分是不是真的了解order by的执行了。大部分人会以为file sort是文件排序,其实不要看字面意思,并不是文件排序!只不过是表示取出来的数据根据order by字段,是否还需要再排序。其实不自己试验,挺难想到的。我这里使用mysql5.7试验了几种情况,供大家参考。首先创建的表字段是 id, username, password, age, gender,其中id是自增的主键索引,(username, password, age)是联合索引。

1. 第一种情况:查询语句不带where条件过滤

1)select * from user_info order by username; 使用了file sort,查询的字段不在username联合索引中或者也不是主键id。会产生file sort。等价于 select gender from user_info order by username,也会产生file sort!那 select id from user_info order by username,会不会产生file sort呢?是不会的,因为mysql的b+树叶子节点也是存储了主键信息的。

2)那这样呢 select password from user_info order by username; 这个是不会产生file sort的!因为查询的字段在联合索引中。

3)select username from user_info order by password, username; 这个select的字段username是在联合索引中,但是在索引上查出的数据是先按照username,再按照password排序的。

阅读全文

本文共计1149个文字,预计阅读时间需要5分钟。

看了许多排名靠前的博客,发现很多都讲错了!我开始按照博客来操作,没有怀疑,直到自己试了一下才发现是错的。在面试中有时会遇到关于 `file sort` 的问题,这个实际操作区域能否真实反映问题呢?

看了网上很多排名很靠前的博客,发现好多都讲错了!我开始按照博客来,没有怀疑,直到自己试了一下才发现是错的。file sort在面试中有时候会问到,这个其实挺能区分是不是真的了解order by的执行了。大部分人会以为file sort是文件排序,其实不要看字面意思,并不是文件排序!只不过是表示取出来的数据根据order by字段,是否还需要再排序。其实不自己试验,挺难想到的。我这里使用mysql5.7试验了几种情况,供大家参考。首先创建的表字段是 id, username, password, age, gender,其中id是自增的主键索引,(username, password, age)是联合索引。

1. 第一种情况:查询语句不带where条件过滤

1)select * from user_info order by username; 使用了file sort,查询的字段不在username联合索引中或者也不是主键id。会产生file sort。等价于 select gender from user_info order by username,也会产生file sort!那 select id from user_info order by username,会不会产生file sort呢?是不会的,因为mysql的b+树叶子节点也是存储了主键信息的。

2)那这样呢 select password from user_info order by username; 这个是不会产生file sort的!因为查询的字段在联合索引中。

3)select username from user_info order by password, username; 这个select的字段username是在联合索引中,但是在索引上查出的数据是先按照username,再按照password排序的。

阅读全文