where条件和order by后条件的索引问题

javaready 2012-04-25 09:01:40
例如有两个字段

id datatime

若为这两个字段建立联合索引

则在用条件 where id > 10 order by datatime desc 查询时

会用到联合索引中的id 还是 id和datatime作为索引

谢谢
...全文
1666 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2012-04-25
  • 打赏
  • 举报
回复
只会用到 ID 索引。
ooooldman123 2012-04-25
  • 打赏
  • 举报
回复
如果你有id ,inputtime ,id_inputtime 3个索引
就要看你的条件语句了,
如果你的inputtime 列足够简单,ID > 条件小 ,肯定走id,如果没有id索引,走id_inputtime ,反之走inputtime
如果你的语句是id=1 and inputtime =2 或者 id =2 order by inputtime 这样走id_inputtime

看情况,mysql优化器自己会走的 ,要分析
yumenfeiyu945 2012-04-25
  • 打赏
  • 举报
回复 1
如果用联合索引,由于你的order by字段是datetime,而where中的id是大于,所以还是要filesort,还不如只用id索引,再filesort排序。如果where中改成id=3,就是用的联合索引,而不必再去filesort
javaready 2012-04-25
  • 打赏
  • 举报
回复
id上并无主键
javaready 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

在id和datatime上建立联合索引
[/Quote]

不对,说错了,就是在两个字段上建立的联合索引,

explain之后显示用了此联合索引,但是只用到了id,没有用datatime

会不会是id索引后查出来的数据很少,所以没有用到datatime
WWWWA 2012-04-25
  • 打赏
  • 举报
回复
在id和datatime上建立联合索引
javaready 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

你是怎样建立索引的
SHOW INDEX FROM tbl_name
[/Quote]

就是id为主键

datatime为单列索引

再无索引
WWWWA 2012-04-25
  • 打赏
  • 举报
回复
你是怎样建立索引的
SHOW INDEX FROM tbl_name
xjpphp 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 1 楼 的回复:

可以用 explain 看看会用到哪个索引,这个最准确。
我直观的认为只会用到 id 索引。


你的直观很对,确实只用了id

可是为什么不是id和datatime都用?
[/Quote]
为什么要一起用,这句sql的意思是取出id大于10的,datatime是是排序,数据库还是没那么笨要去浪费资源的,本人是菜鸟,我猜测(没看过mysql的源码)是使用b-tree索引,所以排序不是问题,没必要使用datatime索引
javaready 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

可以用 explain 看看会用到哪个索引,这个最准确。
我直观的认为只会用到 id 索引。
[/Quote]

你的直观很对,确实只用了id

可是为什么不是id和datatime都用?
nicenight 2012-04-25
  • 打赏
  • 举报
回复
嗯,补充说明我也直观的认为你的联合索引顺序是 id-datatime,而不是 datatime-id。
nicenight 2012-04-25
  • 打赏
  • 举报
回复
可以用 explain 看看会用到哪个索引,这个最准确。
我直观的认为只会用到 id 索引。

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧