Ich habe eine Abfrage mit einer ORDER BY-Klausel, die eine Spalte verwendet, die die letzte Spalte eines Index ist, der in der WHERE-Klausel verwendet wird, im Wesentlichen in der folgenden Form:
SELECT
cols
FROM
tables
WHERE
col_1 = x
AND col_2 = y
AND col_3 = z
ORDER BY col_4
und der Index wird für Spalten (col_1, col_2, col_3, col_4) in dieser Reihenfolge erstellt.
Wenn ich die Abfrage profiliere, wird über 99% der Zeit im Status "Sortierergebnis" verbracht. col_4 ist eine Zeitstempelspalte, wenn dies einen Unterschied macht. Ich verstehe, dass ORDER BY nur unter bestimmten Umständen einen Index verwenden kann, aber ich bin immer noch ein bisschen verwirrt, wann genau der Optimierer dies tun würde.
Sie verwenden
EXPLAIN
für Ihre Abfrage (explain select-or-whatever-your-query-is
).possible_keys
Zeigen Sie diejenigen, die verwendet werden könnten,key
die tatsächlich verwendet werden.quelle
explain format=json select ...
ist noch mächtiger. Es enthältused_key_parts
Informationen darüber, ob ein zusammengesetzter Schlüssel teilweise oder vollständig verwendet wurde, und darüberindex_condition
, welcher Teil der Abfrage für welchen Index verantwortlich ist.