Hallo,
Zuerst, die Daten selbst machen knapp 1.9 MB Speicherplatz aus, die Indices 2.5MB! Ist das kein Mißverhältnis?
Nö. Das bedeutet ja nicht, daß statt in 1.9MB jetzt in 2.5MB gesucht wird. Du hast in diesen 2.5MB ja mehrere einzelne indices. Aber Du siehst schon, das man den Einsatz von INDEX sorgfältig planen sollte.
Warum sollte man einen Index über die PLZ-Spalte erstellen, die es jede PLZ eh nur einmal gibt? ich dachte das wäre dann Schwachsinn?! Dagegen ist kein Index über das Land vorhanden, wovon es ja nur 16 gibt, das wäre doch für einen Index geradezu prädestiniert, oder habe ich da was grundlegend falsch verstanden?
Zum Hintergrund, eine normale Abfrage sieht so aus:
SELECT
objekte.ort
FROM orte
LEFT JOIN objekte
ON orte.plz=objekte.plz
WHERE orte.Land='$bundesland'
Was würdet Ihr hierfür für Indices empfehlen? ('Ort' kann ich aus beiden Tabellen nehmen!)
Grundsätzlich 2 Tips:
1.) Häufige Wiederholungen durch Normalisierung in eigene Tabelle(n) auslagern.
2.) Index über die Spalte(n) anlegen, die am häufigsten abgefragt werden. Besonders für JOIN sehr effektiv...
Wenn 1.) hier nicht in Frage kommt, dann würde ich für Deine Abfrage auf jeden Fall einen index auf "orte.land+orte.plz" und "objekte.plz" legen. Die anderen indices stören aber bei überwiegenden SELECT-Zugriffen nicht weiter.
Gruß,
paschef