ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » MySQL及其它开源数据库 » order by不走索引的原因,为什么呢?

标题: order by不走索引的原因,为什么呢?
离线 lotus1024
花儿草儿没追求



精华贴数 0
个人空间 112
技术积分 1486 (1136)
社区积分 20 (7532)
注册日期 2004-5-27
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-6-25 10:40 
order by不走索引的原因,为什么呢?

order by a.articleid desc,但是articledi是主键有索引的,为什么不走索引,using filesort呢?


只看该作者    顶部
离线 lotus1024
花儿草儿没追求



精华贴数 0
个人空间 112
技术积分 1486 (1136)
社区积分 20 (7532)
注册日期 2004-5-27
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-6-25 10:51 
我把这个语句改成order by a.classid则能走索引,没有usding filesort。a.classid在where条件中出现,也就是在where条件的组合索引中为第一项。而a.articleid不再这个组合索引中。是不是这是原因?


只看该作者    顶部
离线 lotus1024
花儿草儿没追求



精华贴数 0
个人空间 112
技术积分 1486 (1136)
社区积分 20 (7532)
注册日期 2004-5-27
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-6-25 11:22 
我做了一个测试的简单语句:
explain select * from test0625 where id in ('1','2') and name in ('chen') and time in('12') order by time
这个语句,居然还是filesort。如果这个表数据非常大,则order by速度特别慢。晕,不知道怎么创建索引好!


只看该作者    顶部
离线 yueliangdao0608
斑竹
上帝他爸


来自 中国-红灯区-深圳
精华贴数 0
个人空间 0
技术积分 3991 (361)
社区积分 1471 (736)
注册日期 2005-2-25
论坛徽章:19
现任管理团队成员紫蜘蛛玉兔2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:击剑2008北京奥运纪念徽章:足球
2008北京奥运纪念徽章:垒球2008北京奥运纪念徽章:拳击2008北京奥运纪念徽章:手球2008北京奥运纪念徽章:自行车  

发表于 2008-6-25 12:20 


QUOTE:
原帖由 lotus1024 于 2008-6-25 10:51 发表
我把这个语句改成order by a.classid则能走索引,没有usding filesort。a.classid在where条件中出现,也就是在where条件的组合索引中为第一项。而a.articleid不再这个组合索引中。是不是这是原因?

Yeah,this is the fundamental reason.


__________________
-------------------------------------------------------
以前搞维护-搞软件-搞网站-现在搞DBA ---
点击这里访问我的技术博客

最近在练习英语中。。。
Losing my face!
只看该作者    顶部
离线 lotus1024
花儿草儿没追求



精华贴数 0
个人空间 112
技术积分 1486 (1136)
社区积分 20 (7532)
注册日期 2004-5-27
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-6-25 12:58 
哦,那这种语句有没有快速order by的办法呢?如果把order by去了0.5S内能查询到,加了则要30多秒...


只看该作者    顶部
离线 lotus1024
花儿草儿没追求



精华贴数 0
个人空间 112
技术积分 1486 (1136)
社区积分 20 (7532)
注册日期 2004-5-27
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-6-25 13:35 
这种时候,我想如果order by是主要影响性能的原因,那么就把order by后面的字段建立的索引,强制sql语句执行索引:、比如我的
order by id,而id是primary,那我就
FORCE INDEX (
PRIMARY )


只看该作者    顶部
离线 yulihua49
初级会员



精华贴数 0
个人空间 0
技术积分 42 (32980)
社区积分 0 (1266064)
注册日期 2007-2-1
论坛徽章:0
      
      

发表于 2008-7-31 14:03 


QUOTE:
原帖由 lotus1024 于 2008-6-25 10:51 发表
我把这个语句改成order by a.classid则能走索引,没有usding filesort。a.classid在where条件中出现,也就是在where条件的组合索引中为第一项。而a.articleid不再这个组合索引中。是不是这是原因?

按需要建索引是解决办法。


只看该作者    顶部
离线 eyunbo
一般会员


精华贴数 0
个人空间 0
技术积分 390 (5031)
社区积分 153 (2796)
注册日期 2005-8-31
论坛徽章:0
      
      

发表于 2008-8-1 09:15 


QUOTE:
原帖由 lotus1024 于 2008-6-25 13:35 发表
这种时候,我想如果order by是主要影响性能的原因,那么就把order by后面的字段建立的索引,强制sql语句执行索引:、比如我的
order by id,而id是primary,那我就
FORCE INDEX (
PRIMARY )

能把这样做后的结果与大家分享一下吗?


__________________
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问