Tobi: Mysql: Index über alle Felder von WHERE-Anfragen?

Hi,
sollte ich einen index über das varchar oder über beide Felder setzen, wenn ich eine Anfrage a la WHERE varchar_feld="..." AND int_feld=123
habe?
Wird der Index für das eine Feld überhaupt verwendet, wenn die WHERE Bedingung 2 Felder betrifft?
Thx

  1. Hallo,

    wer weiss? Mach doch folgendes:

    1. Führe die Abfrage ganz ohne Indices aus, schau dir den Ausführungsplan an (SHOWPLAN oder so)
    2. Erzeuge einen Index über die erste Spalte (varchar)
    3. Führe die Abfrage aus, schau dir den Ausführungsplan an (SHOWPLAN oder so) und vergleiche
    4. Erzeuge einen Index auch über die zweite Spalte (int)
    5. Führe die Abfrage aus, schau dir den Ausführungsplan an (SHOWPLAN oder so) und vergleiche
    6. Drehe die Suchargumente um in der Abfrage, Führe die Abfrage aus, schau dir den Ausführungsplan an (SHOWPLAN oder so) und vergleiche
    7. Lösche die bestehenden Indices, Erzeuge einen zusammengesetzten Index über beide Spalten (zuerst varchar, dann int feld)
    8. Führe die Abfrage aus, schau dir den Ausführungsplan an (SHOWPLAN oder so) und vergleiche
    9. Drehe die Suchargumente um in der Abfrage, Führe die Abfrage aus, schau dir den Ausführungsplan an (SHOWPLAN oder so) und vergleiche
    10. Lösche die bestehenden Indices, Erzeuge einen zusammengesetzten Index über beide Spalten (zuerst int, dann varchar feld)
    11. Führe die Abfrage aus, schau dir den Ausführungsplan an (SHOWPLAN oder so) und vergleiche
    12. Drehe die Suchargumente um in der Abfrage, Führe die Abfrage aus, schau dir den Ausführungsplan an (SHOWPLAN oder so) und vergleiche

    Und dann ziehe aus den Vergleichen deine Lehren.

    Welches der Felder ist signifikanter vom Inhalt? Vielleicht reicht es schon, einen Index nur über dieses Feld zu machen und es als Suchargument an der richtigen (ersten) Stelle zu verwenden.

    Gruss
    Frank