2016-08-27 7 views
0

Hallo ich habe wenig lange Zeit Abfrage, die fast 400ms dauert.Need Optimize TIMESTAMPDIFF Abfrage

das ist meine Abfrage

SELECT id, `from` 
FROM messages 
WHERE `to` = ? 
AND `to_viewed` = '0' 
AND `to_deleted` = '0' 
AND TIMESTAMPDIFF(SECOND,created,?)< 20 AND TIMESTAMPDIFF(SECOND,created,?)>= 0 

Wie ich das optimieren?

obs ich habe kein idex.

EDIT mein

id select_type table type possible_keys key key_len ref rows Extra 
    1 SIMPLE  messages ALL created NULL NULL NULL 10 Using where 
+0

Wir müssen auch die CREATE TABLE-Anweisung sehen. (Ich habe das Gefühl, dass ich das bereits erwähnte) – Strawberry

+0

Gibt es nur 10 Zeilen in der Tabelle? –

+0

@RickJames viele, aber vielleicht ist es über timediff –

Antwort

3

Achten Sie darauf, einen Index für die Spalte created müssen zeigen, erklären. Verwenden Sie dann

AND created BETWEEN ? AND DATE_ADD(?, INTERVAL 20 SECOND); 

Ein Index kann nicht verwendet werden, wenn Sie eine Berechnung für die Spalte durchführen. Sie sollten also die Enden des Zeitbereichs berechnen und dann die Spalte mit dieser vergleichen.

+0

Danke barmar :) es sank auf 280ms :). –

+0

@ScooterDaraf Ich hätte eine größere Verbesserung erwartet. Erwägen Sie, die CREATE TABLE-Anweisung UND die EXPLAIN für die Abfrage bereitzustellen. – Strawberry

+0

Ich habe andere Frage sollte ich einen neuen Beitrag erstellen oder es ist in Ordnung zu bearbeiten und hier hinzufügen? –