Wie interpretiere ich die Ausgabe von MySQL EXPLAIN?
Ich möchte den Inhalt der Spalte auswählentext
vonentrytable
.
EXPLAIN SELECT text
FROM entrytable
WHERE user = 'username' &&
`status` = '1' && (
`status_spam_user` = 'no_spam'
|| (
`status_spam_user` = 'neutral' &&
`status_spam_system` = 'neutral'
)
)
ORDER BY datum DESC
LIMIT 6430 , 10
Die Tabelle enthält drei Indizes:
index_user (Benutzer)index_datum (Datum)index_status_mit_spam (status, status_spam_user, status_spam_system)Das EXPLAIN-Ergebnis ist:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE entrytable ref index_user,index_status_mit_spam index_user 32 const 7800 Using where; Using filesort
Istpossible_keys
die Indizes, die MySQL verwenden möchte, undkeys
die Indizes, die MySQL tatsächlich verwendet?Warum ist der Indexindex_status_mit_spam
nicht benutzt? In der Abfrage haben die Spalten die gleiche Reihenfolge wie im Index, ...Warum ist der Indexindex_datum
nicht verwendet für dieORDER BY
?Wie kann ich meine Tabellenindizes oder die Abfrage optimieren? (Die obige Abfrage benötigt bis zu 3 Sekunden mit ungefähr einer Million Einträgen in der Tabelle.)