Ich habe immer noch Probleme folgendeReihenfolge von Ursachen filesort
EXPLAIN EXTENDED SELECT
`item`.`id`,
`item`.`timestamp`,
`item`.`label`
FROM
item
WHERE
item.dataTypeId=30
GROUP BY
item.id
ORDER BY
item.timestamp DESC
LIMIT 0,6;
Id & Zeitstempel ist ein primäres Schlüsselpaar (MEDIUMINT + DATETIME) dataTypeId ist ein Fremdschlüssel (MEDIUMINT) Tabelle als geschaffen InnoDb
Es kann mehr Datensätze mit derselben ID und unterschiedlichen Zeitstempel (Versionen des gleichen Elements) geben. Dies ist der Grund für die Gruppe von.
ich zum Beispiel lesen diese: similar topic on stackoverflow
aber es hat nicht mein Problem zu lösen. Folgendes Indizes
Ich habe versucht, zu erstellen:
- Index (dataTypeId, id, Zeitstempel) - in dieser Reihenfolge
- Index (dataTypeId, Zeitstempel) - in dieser Reihenfolge
- Index auf id
- Index auf Zeitstempel
die letzten beiden ein kleines Stück Verzweiflung ist
ich denke, ich muss etwas Grundlegendes vermissen -
aber wirklich nicht wissen, was.
Erwarten Sie nicht die Lösung (es wäre schön :) richtig kicken mich einfach :)
sort_buffer_size ist jetzt 4194288
edit: erklären - keine Indizes
"1" "SIMPLE" "item" "ref" "FK_dataTypeId" "FK_dataTypeId" "4" "const" "5608" "Using where; Using temporary; Using filesort"
erklären mit Indizes erstellt
"1" "SIMPLE" "item" "ref" "FK_udssDataItem_1,testIndexType,testIndexTypeTimestamp,testIndexTypeIdTime" "FK_udssDataItem_1" "4" "const" "5632" "Using where; Using temporary; Using filesort"
Datei Sortierung bedeutet nicht langsam, bitte werfen Sie die ** EXPLAIN ** Abfrage Ergebnisse – ajreal
die Abfrage über 5000 Zeile dauert 2 Sekunden, habe ich meine ursprüngliche Abfrage auf Mindestgröße vereinfacht - und versuchen Schritt für Schritt mit Ausnahme von einem möglicher Grund nach dem anderen. Der einzige "heiße Punkt" in EXPLAIN ist der mit "filesort". Weitere Zeilen werden über Indizes mit geringer Anzahl von Zeilen verarbeitet ... – jakub
Zuerst gruppieren Sie nach ID, aber Sie sortieren nach Zeitstempel ... das ergibt keinen logischen Sinn. Sie sollten wahrscheinlich nach einer Aggregatfunktion (AVG/MAX/MIN) auf dem Zeitstempel sortieren. – Riedsio