Wie interpretieren Sie die Ausgabe von MySQL ERKLÄREN?
Wählen Sie den Inhalt der Spalte text
aus entrytable
.
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 hat drei Indizes:
- index_user (Benutzer)
- index_datum (datum)
- index_status_mit_spam (status, status_spam_user, status_spam_system)
Die ERKLÄREN Ergebnis:
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
- Ist
possible_keys
die Indizes von MySQL verwenden könnte, undkeys
die Indizes von MySQL tatsächlich verwendet? - Warum ist der index
index_status_mit_spam
nicht verwendet? In der Abfrage, die Spalten haben die gleiche Reihenfolge wie im index,... - Warum ist der index
index_datum
nicht für dieORDER BY
? - Wie Optimiere ich meine Tabelle-Indizes oder die Abfrage? (Die obige Abfrage benötigt bis zu 3 Sekunden mit über einer million Einträge in der Tabelle)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beantwortung Ihrer Fragen:
Ist
possible_keys
die Indizes von MySQL verwenden könnte, undkeys
sind die Indizes von MySQL tatsächlich verwendet? Ja, das ist richtig.Warum ist der index
index_status_mit_spam
nicht verwendet? In der Abfrage die Spalten haben die gleiche Reihenfolge wie im index. SQL Statistiken verwendet, die auf Indizes der Tabelle zu bestimmen, welcher index zu verwenden. Die Reihenfolge der Felder in der select-Anweisung hat KEINE Wirkung, auf dem index zu verwenden. Statistiken rund um Indizes, die Informationen enthalten, wie die Eindeutigkeit des index, und anderen Dingen. Weitere eindeutige Indizes verwendet werden könnten. Mehr dazu Lesen Sie hier: http://dev.mysql.com/doc/innodb/1.1/en/innodb-other-changes-statistics-estimation.html oder hier:http://dev.mysql.com/doc/refman/5.0/en//myisam-index-statistics.html. Diese Faktoren bestimmen, wie MySQL wählen index zu verwenden. Es wird nur EIN index.Warum ist der index
index_datum
nicht für dieORDER BY
? MySQL nur einen index nicht zwei, während eine Abfrage, wie mit einem zweiten index langsamer wird die Abfrage sogar noch mehr. Lesen Sie einen index ist NICHT das Lesen der Tabelle. Dies ist im Zusammenhang der betrieblichen Effizienz bei der Abfrage. Hier Antworten, die erklären können, einige Konzepte: https://dba.stackexchange.com/questions/18528/performance-difference-between-clustered-and-non-clustered-index/18531#18531 Oder Hinzufügen limit-Klausel, MySQL Abfrage verlangsamt sich dramatisch Oder MySQL Indizes und, wenn um Sie zu gruppieren. Diese Antworten haben eine Menge Details, die Ihnen helfen zu verstehen, MySQL-Indizierung.Wie Optimiere ich meine Tabelle-Indizes oder die Abfrage? (Die obige Abfrage benötigt bis zu 3 Sekunden mit über einer million Einträge in der Tabelle). Nun, es ist ein filesort hier, dass ist wahrscheinlich Bremsen Sie ab. Es könnte sein, dass die Tabelle hat zu viele Indizes und MySQL ist die Wahl der falschen.
Müssen Sie verstehen, dass die Indizes beschleunigt liest und verlangsamt schreibt zu den Tabellen. Also nur das hinzufügen von Indizes ist nicht immer eine gute Idee. Die oben genannten Antworten und Hinweise sollen Ihnen helfen, ein solides Verständnis.
possible_keys
bezeichnet alle Indizes der Tabelle (Schlüssel oder index-Spalten)FORCE INDEX
,USE INDEX
oderIGNORE INDEX
in Ihrer AbfrageÜberprüfen Sie diesen link - http://dev.mysql.com/doc/refman/5.1/en/index-hints.html .
Versuchen Sie zwingen den verschiedenen index - überprüfen Sie diesen link für die sicher - MySQL `FORCE INDEX` use cases?
Verstehen, EXPLAIN-Ausgabe-format - http://dev.mysql.com/doc/refman/5.1/en/explain-output.html