Andreas Korthaus: Wie bekomme ich einen JOIN schnell?

Beitrag lesen

Hallo!

Ist ne Prima Sache wenn man kurz vorm Abschicken mal aus Versehen auf "Refresh" kommt ;-)
Also nochmal:
Ich kann in der MySQL Doku leider nicht wirklich alle Informationen finden die ich gerne hätte. Aber erstmal zu meiner Abfrage:

Tabelle "a" enthält wenige Datensätze, und die wenigen Datensätze sollen noch mit in Tabelle "b"(viel mehr Datensätze) enthaltenen Daten gefiltert werden.

SELECT a.key
FROM a
LEFT JOIN b
ON a.key=b.key
WHERE(b.wert1 = 1234 AND b.wert2 < 4321)

So. Zunächst, die Richtung des Joins sollte ja so stimmen. Aber wie optimiere ich das jetzt? In der MySQL Doku steht im Kapitel zur Optimierung, dass man unbedingt einen Index über beide Tabellen anlegen soll, aber wie geht das? Das steht nirgends in der Doku! Und auch in PHPmyADmin finde ich keine Möglichkeit. Wie muß das heißen? Und wie sollte der Index idealerweise überhaupt aussehen, also über welche Spalten und in welcher Reihenfolge?

ich habe ja
a.key <= benötigt für den JOIN
b.key <= benötigt für den JOIN
b.wert1 <= benötigt für WHERE cond.
b.wert2 <= benötigt für WHERE cond.

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.

also vermutlich a.key,b.key

aber was ist mit den beiden anderen Spalten für die WHERE Bedingung? sollte ich die auch hinzufügen, oder lieber nicht? Was ist im allgemeinen wichtiger, ein Index über die JOIN-Spalten, oder über die WHERE-Bedingungen-Spalten?

Was würdet Ihr hier empfehlen?

Viele Grüße
Andreas