我現在大概有一個需求,是需要在資料庫中查詢一個清單。數據表的樣子大概是這樣的:
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上的索引,而不使用其它欄位上的索引。