where条件和order by后条件的索引问题 例如有两个字段id datatime若为这两个字段建立联合索引则在用条件 where id > 10 order by datatime desc 查询时会用到联合索引中的id 还是 id和datatime作为索引谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用 explain 看看会用到哪个索引,这个最准确。我直观的认为只会用到 id 索引。 嗯,补充说明我也直观的认为你的联合索引顺序是 id-datatime,而不是 datatime-id。 你的直观很对,确实只用了id可是为什么不是id和datatime都用? 为什么要一起用,这句sql的意思是取出id大于10的,datatime是是排序,数据库还是没那么笨要去浪费资源的,本人是菜鸟,我猜测(没看过mysql的源码)是使用b-tree索引,所以排序不是问题,没必要使用datatime索引 你是怎样建立索引的SHOW INDEX FROM tbl_name 就是id为主键datatime为单列索引再无索引 不对,说错了,就是在两个字段上建立的联合索引,explain之后显示用了此联合索引,但是只用到了id,没有用datatime会不会是id索引后查出来的数据很少,所以没有用到datatime 如果用联合索引,由于你的order by字段是datetime,而where中的id是大于,所以还是要filesort,还不如只用id索引,再filesort排序。如果where中改成id=3,就是用的联合索引,而不必再去filesort 如果你有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优化器自己会走的 ,要分析 问一下 mysql.exe还原数据库的时间问题 mysql存储过程编辑总是出错 这句话是什么意思 求oracle语句转换mysql!~ 是否存在MySql更新字段比较函数? like '%abc' 可不可以优化 MYSQL数据库文件怎样移动? 我想把表里的自增字段按照另一字段的排序进行重构,有办法吗? mysql两条或多条insert同时执行 是串行关系还是并行关系 多表查询某一字段是否有值该如何写? 开发个系统,想要用mysql建两张表:角色表和用水户表 存储过程,单引号问题
我直观的认为只会用到 id 索引。
你的直观很对,确实只用了id可是为什么不是id和datatime都用?
SHOW INDEX FROM tbl_name
就是id为主键datatime为单列索引再无索引
不对,说错了,就是在两个字段上建立的联合索引,explain之后显示用了此联合索引,但是只用到了id,没有用datatime会不会是id索引后查出来的数据很少,所以没有用到datatime
就要看你的条件语句了,
如果你的inputtime 列足够简单,ID > 条件小 ,肯定走id,如果没有id索引,走id_inputtime ,反之走inputtime
如果你的语句是id=1 and inputtime =2 或者 id =2 order by inputtime 这样走id_inputtime看情况,mysql优化器自己会走的 ,要分析