Ich habe jetzt wahrscheinlich eine Anforderung, nämlich eine Liste in der Datenbank abzufragen. Die Datentabelle sieht wahrscheinlich so aus:
A | B | C | D | E |
1 | 1 | 1 | 2016-08-05 | 40 |
... | ... | ... | ... | ... |
Und meine aktuelle SQL-Anweisung sieht wahrscheinlich so aus
<code class="sql">SELECT * FROM `TABLE` WHERE B = 1 AND C = 1 AND D = 2016-08-05 ORDER BY E DESC</code>
Wie soll ich in diesem Fall einen Index erstellen, damit er die Abfrage treffen kann? Ist es möglich, einen zusammengesetzten Index von index(['B', 'C', 'D', 'E'])
zu erstellen?
Ich habe jetzt wahrscheinlich eine Anforderung, nämlich eine Liste in der Datenbank abzufragen. Die Datentabelle sieht wahrscheinlich so aus:
A | B | C | D | E |
1 | 1 | 1 | 2016-08-05 | 40 |
... | ... | ... | ... | ... |
Und meine aktuelle SQL-Anweisung sieht wahrscheinlich so aus
<code class="sql">SELECT * FROM `TABLE` WHERE B = 1 AND C = 1 AND D = 2016-08-05 ORDER BY E DESC</code>
Wie soll ich in diesem Fall einen Index erstellen, damit er die Abfrage treffen kann? Ist es möglich, einen zusammengesetzten Index von index(['B', 'C', 'D', 'E'])
zu erstellen?
Theoretisch kann es so aufgebaut werden, da das Prinzip des linken Präfixes des Index die drei Felder B, C und D nacheinander trifft. Wenn das E-Feld jedoch nur zum Sortieren verwendet wird, wird der Index leider nicht verwendet kann nicht ausgelöst werden.
Denn wenn das Feld „Reihenfolge nach“ in der Where-Bedingung erscheint, wird der Index ohne Sortiervorgang verwendet. In anderen Fällen führt „Ordnen nach“ keine Sortiervorgänge aus.
Weitere Informationen finden Sie in diesem Artikel zur Analyse der Beziehung zwischen Orderby und Index
http://www.cnblogs.com/zhaoyl...
MySQL erzwingt den angegebenen Index FORCE INDEX
SELECT * FROM TABLE1 FORCE INDEX (FIELD1) ...
Die obige SQL-Anweisung verwendet nur den auf FELD1 erstellten Index, nicht die Indizes für andere Felder.