2009-05-08 14 views
1

Ich brauche eine Abfrage zu beschleunigen. Ist eine Indextabelle, nach der ich suche? Wenn ja, wie mache ich einen? Muss ich jedes Insert updaten?Was ist eine MySQL-Index-Tabelle?

Hier sind das Tabellenschema:

--table1-- | --tableA-- | --table2-- 
id   | id   | id 
attrib1  | t1id   | attrib1 
attrib2  | t2id   | attrib2 
      | attrib1  | 

Und die Abfrage:

SELECT 
    table1.attrib1, 
    table1.attrib2, 
    tableA.attrib1 
FROM 
    table1, 
    tableA 
WHERE 
    table1.id = tableA.t1id 
    AND (tableA.t2id = x or ... or tableA.t2id = z) 
GROUP BY 
    table1.id 

Antwort

7

Sie benötigen einen zusammengesetzten Index für tableA zu erstellen:

CREATE INDEX ix_tablea_t1id_t2id ON table_A (t1id, t2id) 

Indizes in MySQL betrachtet werden ein Teil einer Tabelle: Sie werden automatisch aktualisiert und automatisch verwendet lly, wenn das Optimierungsprogramm entscheidet, es ist ein guter Schritt, sie zu nutzen.

MySQL verwendet nicht den Begriff index table.

Dieser Begriff wird von Oracle verwendet, um zu verweisen, was andere Datenbanken CLUSTERED INDEX anrufen: eine Art Tabelle, in der die Datensätze selbst nach dem Wert einer Spalte (oder einer Reihe von Spalten) angeordnet sind.

In MySQL:

  • Wenn Sie MyISAM Speicher wird ein Index als separate Datei erstellt, die .MYI Erweiterung hat.

    Der Inhalt dieser Datei repräsentiert eine B-Tree, jedes Blatt enthält den Indexschlüssel und einen Zeiger auf den Offset in .MYD Datei, die die Daten enthält.

    Die Größe des Zeigers wird durch die Server-Einstellung myisam_data_pointer_size, genannt bestimmt, die sich von 2 zu 7 Bytes und standardmäßig 6 da MySQL 5.0.6 variieren.

    Dies ermöglicht die Erstellung MyISAM Tabellen bis zu 2^(8 * 6) bytes = 256 TB

  • In InnoDB alle Tabellen von Natur aus durch die PRIMARY KEY bestellt werden, ist es nicht heap-organisierte Tabellen unterstützen.

    Jeder Index in der Tat ist also nur eine einfache InnoDB Tabelle mit einem einzelnen PRIMARY KEY von N+M Datensätze, bestehend aus: N Aufzeichnungen einen indizierte Wert zu sein, und M ein PRIMARY KEY der Haupttabelle Datensatz wobei Datensätze, die die indexierten Daten enthalten.