Hallo!
SELECT a.key
FROM a
LEFT JOIN b
ON a.key=b.key
WHERE(b.wert1 = 1234 AND b.wert2 < 4321)
Du hast es ja selbst gelesen: Den Index musst Du in den Tabellen anlegen. Geht sogar mit phpMyAdmin ...
Ich finde es nicht mehr, aber ich könnte schwören das ich in der Doku irgendwo gelesen habe dass man auch indices über 2 Tabellen erstellen kann. Wobei - mysql erstellt pro Tabelle ein Verzeichis, wo sollte dann der Index gespeichert werden?
a.key <= benötigt für den JOIN
b.key <= benötigt für den JOINAlso jeweils ein Index für das Feld key in Tabelle a und in Tabelle b
Aber es kann doch pro Abfrage nur _ein_ Index verwendet werden, oder?
b.wert1 <= benötigt für WHERE cond.
b.wert2 <= benötigt für WHERE cond.
Greifst Du oft auf diese Spalten zu, dann lohnt sich auch ein Index dafür
Jedesmal greife ich drauf zu. Ich will einen Index gerade für die obige Anfrage optimieren.
Soweit ich das weiß sollten die Spalten in der Reihenfolge ihres "unique-Grades" im Index stehen.
a.key ist eine Teilmenge aus b.key, welches unique ist.
Wenn ich Dich richtig verstehe, hast Du ja schon einen UNIQUE-Index auf key in Tabelle b.
nö, die Spalte "key" ist nur unique. Was bringt mir ein Primärschlüssel, wenn ich gerne einen Index mit allen 4 Spalten hätte, oder brauche ich einen primär-Schlüssel über die Spalte a.key, und einen 2. Index über (b.key,b.wert1,b.wert2)? b.key ist ebenfalls unique, und somit sollte es auch an erster Stelle stehen.
Was für einen Index Du in Tabelle a verwendest, hängt von der Beziehung zwischen den Tabellen ab.
Wie beschrieben, in Tabelle "b" stehen alle verfügaren Werte für "key", und die Werte sind unique, es gibt keine Doppelten Werte. Spalte "a.key" enthält eine Teilmenge von "b.key".
Können einem Datensatz aus Tabelle b mehrere Datensätze aus Tabelle a zugeordnet sein (1:n)-Beziehung, dann ein einfacher Index auf key in Tabelle a
Oh, jetzt wo Du es sagst, sicher kann das sein ;-)
Also a.key ist also doch nicht unique, kann aber immer noch nur Wete aus b.key enthalten, welche aber auf alle Fälle unique ist.
|| Ist jedem Datensatz aus Tabelle b maximal ein Datensatz aus Tabelle a zugeordnet (1:1)-Beziehung, dann ein UNIQUE-Index auf key in Tabelle
ja, das also nicht, also ein non-unique Index.
Was für Indizes auf die Spalten b.wert1 und b.wert2, hängt von den möglichen Werten ab, wahrscheinlich also ein einfacher Index, da die Werte wohl mehrfach vorkommen können.
genau. Nur wie gesagt, es wird nur ein index pro SQL-Abfrage verwendet, der beste, da bringt es nichts wenn ich 4 für sich nette Indices habe, ich brauche _einen_ guten der auf obige Abfrage passt.
Denke daran, dass Indizes die Einfüge- und Löschoperationen auf den Tabellen verlangsamen.
Das ist egal.
Grüße
Andreas