mysql 查看索引命中_请问下如何在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上的索引,而不使用其它字段上的索引。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值