Rumah > pembangunan bahagian belakang > tutorial php > 请问下如何在Mysql中where与orderBy后在命中索引?

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

WBOY
Lepaskan: 2016-08-29 08:50:52
asal
1878 orang telah melayarinya

我现在大概有一个需求,是需要在数据库中查询一个列表。数据表的样子大概是这样的:

A B C D E
1 1 1 2016-08-05 40
... ... ... ... ...

而我现在的SQL语句大概是这样的

<code class="sql">SELECT * FROM `TABLE` WHERE B = 1 AND C = 1 AND D = 2016-08-05 ORDER BY E DESC</code>
Salin selepas log masuk
Salin selepas log masuk

在这种情况下我应该怎么建立索引才能在查询的时候命中呢?建立index(['B', 'C', 'D', 'E'])的复合索引可以么?

回复内容:

我现在大概有一个需求,是需要在数据库中查询一个列表。数据表的样子大概是这样的:

A B C D E
1 1 1 2016-08-05 40
... ... ... ... ...

而我现在的SQL语句大概是这样的

<code class="sql">SELECT * FROM `TABLE` WHERE B = 1 AND C = 1 AND D = 2016-08-05 ORDER BY E DESC</code>
Salin selepas log masuk
Salin selepas log masuk

在这种情况下我应该怎么建立索引才能在查询的时候命中呢?建立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上的索引,而不使用其它字段上的索引。

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan