首頁  >  文章  >  後端開發  >  請問下如何在Mysql中where與orderBy後在命中索引?

請問下如何在Mysql中where與orderBy後在命中索引?

WBOY
WBOY原創
2016-08-29 08:50:521814瀏覽

我現在大概有一個需求,是需要在資料庫中查詢一個清單。數據表的樣子大概是這樣的:

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>

在這種情況下我該怎麼建立索引才能在查詢的時候命中呢?建立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>

在這種情況下我該怎麼建立索引才能在查詢的時候命中呢?建立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上的索引,而不使用其它欄位上的索引。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn