2017-02-07 8 views
0

Meine Abfrage auszuführen ist einfach, aber enthält viele Daten:MySQL zu viel Zeit

SELECT * 
FROM trackhistory 
WHERE key=14846 and 
    date between "2016-11-15 00:00:00" and "2016-12-16 13:47:02" 

Ich habe mehr als 10 Millionen Zeilen in dieser Tabelle.

Meine Tabellenstruktur ist:

enter image description here

Bitte mir helfen, es zu optimieren. Es dauert mehr als zwei Minuten für die Ausführung.

Ich habe für die Abfrage erklären, aber keine Ahnung bekommen.

+5

Alle Indizes definiert? Wenn nicht, dann fügen Sie eine für den Schlüssel und eine für das Datum –

+0

hinzu. Die möglichen Schlüssel, die null sind, sollten Ihnen einen Hinweis geben ... – Shadow

Antwort

1

Eine zusammengesetzte INDEX(key, date) wird besser sein als separate Indizes.

Siehe my index cookbook

0

Fügen Sie zuerst einen Index zu Key hinzu, und sehen Sie, was passiert. Die Syntax ist somehting wie folgt aus:

ALTER TABLE `trackhistory` ADD INDEX (`product_id`) 

Dann Sie einen Schlüssel zu Date hinzufügen könnte, aber das wird einige zusätzliche Aufwand hinzufügen, mit Einsetzen und wird etwas Speicherplatz nehmen. Dies hängt von Ihren Anwendungsfällen ab und es ist unmöglich zu sagen, ob dies eine schlaue Sache ist.

Am besten testen Sie Ihre Anwendungsfälle.

(und für meine geistige Gesundheit, wenn Sie Kamel-Fall in Ihrer Datenbank haben, warum nicht zeigen, die in Ihrer Anfrage ist gut. Das sieht nur eklig, ein Date Feld mit und in der Abfrage date hat. Ich weiß, es funktioniert, aber ....)