2011-01-06 8 views
0

Ich habe zwei Tabellen: Tabelle1 hat 4lacs (400.000) Datensätze und andere haben 100 Datensätze.MySQL Abfrage-Optimierung

Ich versuche folgende Abfrage:

SELECT DISTINCT t1.id as id 
FROM table1 t1 
JOIN table2 t2 ON t2.f_id = t1.id 
       AND t1.action = 0; 

I MYISAM Motor verwenden. t1.id und t2.f_id sind gleich und indiziert.

Diese Abfrage dauert 30 Sekunden. Gibt es einen Weg, es schneller zu machen?

Antwort

0

Einen Index auf t1.action,t1.id und einen anderen auf t2.f_id setzen.

4

Achten Sie darauf, einen Index für table1.id, table1.action und table2.f_id, haben und auf jeder Tabelle keine anderen Indizes unter der Annahme leben, die Performance-Probleme verursachen, sollten diese zu einer optimalen näher:

SELECT 
    DISTINCT t1.id AS id 
FROM 
    table1 AS t1 
    JOIN table2 AS t2 ON t2.f_id = t1.id 
WHERE 
    t1.action = 0 
0

Der erste Schritt würde sei ein Index auf table1 hinzufügen, die id und action zusammen umfasst.

Die Einführung von distinct in die Abfrage wird es auch verlangsamen.