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 中关于取得某个条件相同 另外个条件较小的语句怎么写 有在c++下用过mysql++的吗? Fedora 12 下运行程序报错:used MySql library isn't thread-safe 一简单的SQL语句查询问题 fulltext 相关性的问题 求一个查询sql,谢谢大家 mysql性能的优化?! 请教:不是备份和恢复整个数据库,而是备份和恢复某段时间的记录 mysql中二进制varbinary格式数据存储问题 mysql查询语句 开发个系统,想要用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优化器自己会走的 ,要分析