Frage

Ich mag eine MySQL-Abfrage beschleunigen, die im Grunde eine Seite von Daten nach folgendem Muster

abrufen
select
 my_field_A,
 my_field_B
where
 time_id >= UNIX_TIMESTAMP('1901-01-01  00:00:00') AND
 time_id < UNIX_TIMESTAMP('2009-01-16  00:00:00')

Das Feld time_id ist ein MySQL-Index, doch verhält sich die Abfrage, als ob die gesamte Datenbank bei jeder Abfrage gelesen wurde (ein paar Zeilen abzurufen sind schon recht langsam). Ich kein Experte in MySQL. Kann jemand raten, was ich falsch mache?

War es hilfreich?

Lösung

Stellen Sie sicher, dass Sie einen Index (B-Baum) auf TIME_ID haben, sollte dies für Bereichsanfragen effizient sein. Achten Sie außerdem darauf, dass TIME_ID das jeweilige Zeitformat ist.

Wenn Sie wirklich wollen, zu verstehen, was mysql tut man das Schlüsselwort hinzufügen ‚erklären‘ infront der Abfrage und führen Sie es in Ihrem MySQL-Client. Dies wird einige Informationen zeigen, was mysql tut und welche Art von Scans durchgeführt werden.

http://dev.mysql.com/doc /refman/5.0/en/using-explain.html

Andere Tipps

Da es wahrscheinlich viele time_id die unter diesen Kriterien fallen, MySQL kann denken, dass die Full Table Scan besser ist.

Versuchen Sie, den Index zu zwingen:

SELECT
 my_field_A,
 my_field_B
FROM mytable FORCE INDEX (index_name_on_time_id)
WHERE
 time_id >= UNIX_TIMESTAMP('1901-01-01  00:00:00') AND
 time_id < UNIX_TIMESTAMP('2009-01-16  00:00:00')

Sie benötigen den unteren Bereich? Gibt es irgendwelche Einträge früher als 1901? Wie wird die TIME_ID Spalte erzeugt? Wenn die TIME_ID immer größer mit jedem neuen Eintrag wird in DB hinzugefügt, können Sie mit am nächsten Eintrag zu 2009-01-16 Suche nach ID zu prüfen, und wählen Sie dann mit ID

select my_field_A, my_field_B
FROM
  mytable
WHERE
  id <= ?

Wenn das nicht der Fall ist, versucht Partitionierung zur Verfügung Check-out von MySQL 5.1 und bricht die Tabelle nach Jahren auf, dass die Geschwindigkeit drastisch erhöhen sollte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top