免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6781 | 回复: 8
打印 上一主题 下一主题

mysql中的using filesort问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-26 17:32 |只看该作者 |倒序浏览
在用explain对select语句进行分析时,extra列中可能出现using filesort。它的确切含意是什么呢?查过手册,不过没看明白。第一句就不太理解:MySQL must do an extra pass to find out how to retrieve the rows in sorted order. 这个extra pass怎么解释呢?

我现在只知道,如果做了order by就可能出现using filesort。哪位大侠能给出这个的确切含意?最好能举列说明。

还有,是不是只要对order by的列做了索引,就一定可以避免using filesort的出现?

谢谢大家了!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-12 06:20:00
2 [报告]
发表于 2007-11-27 11:22 |只看该作者
是不是只要对order by的列做了索引,就一定可以避免using filesort的出现?
不一定

我觉得索引这个东西你还是要懂B+树的原理出发,才能正确的添加
不是三言两语就能说完的

论坛徽章:
0
3 [报告]
发表于 2007-11-27 13:21 |只看该作者
只要你在WHERE子句里不用那个字段。就不会用到索引。

论坛徽章:
0
4 [报告]
发表于 2007-11-27 18:49 |只看该作者

回复 #3 yueliangdao0608 的帖子

这样说吧,如果存在三种情况
1.只有索引(a,b)。
2.只有索引a。
3.只有索引b。

针对这三种情况下述查询:
select * from tablename where a = 100 order by b

哪种情况会用到索引,哪种会using filesort?

论坛徽章:
0
5 [报告]
发表于 2007-11-27 19:03 |只看该作者
情况3下根本就无法使用索引进行查询

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-12 06:20:00
6 [报告]
发表于 2007-11-28 13:44 |只看该作者
1.可以完全用到索引,不会有filesort
2.会产生filesort,因为b索引用不到,需要多做一次排序,原因请理解B+树原理
3。不会用到索引
但是如果强制使用b索引,如:
select * from table force index(b) where a=@a order by b,不会产生filesort,但是会扫描全表,大部分情况下应该都比2慢

[ 本帖最后由 qlks 于 2007-11-28 13:46 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-11-29 16:29 |只看该作者

回复 #6 qlks 的帖子

非常感谢qlks!
我看了下btree的原理。但只明白了对and条件的查询是如何利用btree。如果查询条件里有or或者order by等情况,btree是怎么处理的还是不明白。有没有什么资料推荐下?

[ 本帖最后由 qmhball 于 2007-11-29 16:32 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-11-29 19:16 |只看该作者
MySQL 需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配 WHERE 子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行。

以上是 mysql 中文件中关于 Using_filesort 的解释。

论坛徽章:
0
9 [报告]
发表于 2007-12-03 11:12 |只看该作者

回复 #8 blackbox 的帖子

谢blackbox先!  
手册上的这段我也看到了,关键就是这个“额外的一次传递”(原文an extra pass),没整明白啥意思,传了什么?传给谁了?
哪位大侠能给解释下吗?谢过~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP