您好,欢迎访问一九零五行业门户网

请问下如何在Mysql中where与orderBy后在命中索引?

我现在大概有一个需求,是需要在数据库中查询一个列表。数据表的样子大概是这样的:
a b c d e
1 1 1 2016-08-05 40
... ... ... ... ...
而我现在的sql语句大概是这样的
select * from `table` where b = 1 and c = 1 and d = 2016-08-05 order by e desc

在这种情况下我应该怎么建立索引才能在查询的时候命中呢?建立index(['b', 'c', 'd', 'e'])的复合索引可以么?
回复内容: 我现在大概有一个需求,是需要在数据库中查询一个列表。数据表的样子大概是这样的:
a b c d e
1 1 1 2016-08-05 40
... ... ... ... ...
而我现在的sql语句大概是这样的
select * from `table` where b = 1 and c = 1 and d = 2016-08-05 order by e desc

在这种情况下我应该怎么建立索引才能在查询的时候命中呢?建立index(['b', 'c', 'd', 'e'])的复合索引可以么?
理论上是可以这么建的,因为索引的左前缀原则,会依次命中b,c,d三个字段,但是很遗憾,e字段只用来排序的话是无法触发索引的。
因为当order by 字段出现在where条件中时,才会利用索引而无需排序操作。其他情况,order by不会出现排序操作。
具体可以看这篇文章,分析orderby 和索引的关系
http://www.cnblogs.com/zhaoyl...
mysql 强制指定索引 force index
select * from table1 force index (field1) …
以上的sql语句只使用建立在field1上的索引,而不使用其它字段上的索引。
其它类似信息

推荐信息