einfache MySQL ABfrage kompliziert
mixmastertobsi
- datenbank
Hallo,
ich versuche über zwei Tabellen hinweg zu suchen.
Tabelle 1
Kunden
KNR | EMAIL | TYP
-----------------
1 | mail1@| e
2 | mail2@| e
Tabelle 2
Adressen
ID | KNR | NAME | PLZ
----------------------
1 | 1 | test | 74374
2 | 2 | test | 54564
meine MySQL Abfrage funktioniert, ist aber extram langsam, weil es in Tabelle 1 über 20000 Kunden gibt und in Tabelle 2 über 30000 Adressen.
Den INDEX habe ich auf KNR, PLZ und EMAIL.
Im Suchfeld gebe ich zum Beispiel folgendes ein
mail1@
SELECT ... FROM tabelle1 LEFT JOIN tabelle2 ON tabelle2.knr=tabelle1.knr WHERE tabelle1.email='mail1@' OR tabelle2.plz='mail1@'
Wo und wie kann ich diese "SUCHE" optimieren.
Ohne dieses OR in der WHEREKLAUSEL läuft es wesentlich schneller - aber so sucht MySQL in Tabelle1 in allen Reihen.
moin,
Den INDEX habe ich auf KNR, PLZ und EMAIL.
welche tabellen, zusammengesetzte indexe oder jeweils einen pro spalte ?
SELECT ... FROM tabelle1 LEFT JOIN tabelle2 ON tabelle2.knr=tabelle1.knr WHERE tabelle1.email='mail1@' OR tabelle2.plz='mail1@'
und vor allem, was willst du den fachlich mit der abfrage erreichen ?
Ilja
Lieber mixmastertobsi,
ich versuche über zwei Tabellen hinweg zu suchen.
das kommt mir aber sehr bekannt vor...
Liebe Grüße,
Felix Riesterer.
Hallo,
SELECT KNR
FROM tabelle1
WHERE email = '######'
UNION -- bewusst nicht UNION ALL weil wir ja doppelten KNR haben wollen?
SELECT KNR
FROM tabelle2
WHERE plz = '######'
Der Rest zur Optimierung ist Frage der passenden Indizierung.
Ciao, Frank