社区
MySQL
帖子详情
where条件和order by后条件的索引问题
javaready
2012-04-25 09:01:40
例如有两个字段
id datatime
若为这两个字段建立联合索引
则在用条件 where id > 10 order by datatime desc 查询时
会用到联合索引中的id 还是 id和datatime作为索引
谢谢
...全文
1666
12
打赏
收藏
where条件和order by后条件的索引问题
例如有两个字段 id datatime 若为这两个字段建立联合索引 则在用条件 where id > 10 order by datatime desc 查询时 会用到联合索引中的id 还是 id和datatime作为索引 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 索引。
sql server系列课程t-sql基础语法篇
本课程主要讲解标识符,变量,常量,运算符,表达式,流程控制语句,链接查询,where
条件
,
order
by ,group by ,having by 以及关联查询等知识点的详解。
sql
order
by与
索引
之间的关系(where
条件
出现字段才有效)
ORDER
BY 通常会有两种实现方法,一个是利用有序
索引
自动实现,也就是说利用有序
索引
的有序性就不再另做排序操作了。另一个是把结果选好之后再排序。 用有序
索引
这种,当然是最快的,不过有一些限制
条件
,来看下面的...
MySQL where
order
by 和 limit 与
索引
奇怪的慢sql ...select * from acct_trans_log WHERE acct_id = 1000000000009000757
order
by create_time desc limit 0,10 第二条: select * from acct_trans_log WHERE acct_id = 1000000000009003...
mysql5.7
索引
where和
order
by排序
问题
select * from table where a=1 and b=2
order
by a;
索引
排序 select * from table where a=1 and b=2
order
by b;
索引
排序 select * from table where a=1 and b=2
order
by c;
索引
排序 select * from t...
从0到1学数据库:where
条件
查询和
Order
By数据排序
上期文章 从0到1学数据库:数据库基础 ... 从0到1学数据库:Select查询语句 ...有没有觉得前面的查询过于简单,根本不满足我们的日常需求, ...其实,在查询中我们还可以添加...3.
Order
by子句 WHERE子句的使用 W...
MySQL
56,678
社区成员
56,708
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章