Volltextsuche und weiterer Index

J

jonass

Grünschnabel
Hallo,

ich habe folgendes Phänomen:
Durchsuche ich mit der Volltextsuche meine komplette Tabelle ("...WHERE MATCH (name) AGAINST ('fischer')"), werden Ergebnisse im Bruchteil von einer Sekunde ausgegeben.
Erweiter ich jedoch die WHERE Klausel auf eine weitere Spalte ("...WHERE MATCH (name) AGAINST ('fischer') AND aktiviert=1"), dauert die Anfrage mehrere Sekunden.

Klar kann ich jetzt das Ergebnis in PHP auswerten, würde aber lieber gleich nur die gewünschten Ergebnisse zurückbekommen. Ich habe auch schon einen 'normalen' Index auf die Spalte aktiviert gesetzt, das bringt jedoch nichts. Man kann leider keine gemischten(volltext und index) indizien auf mehrere Spalten anlegen, deswegen frage ich hier was zu tun ist.
Im Prinzip würden ja zwei Anfragen gehen, eine die erst alle Ergebnisse mit aktiviert=1 zurückliefert. Die Volltextsuche durchsucht dann nur die zurückgegeben Ergebnisse. Geht sowas mit INNER JOIN?

Danke für antworten
 
1.

Verwende inner joins, da kannst du explizit festlegen welche Bedingung zuerst ausgewertet wird.

Wenn du z.B. "aktiviert=1" zuerst auswerten lässt, wird das Kreuzprodukt wesentlich kleiner und die Abfrage schneller.

2.

Ist die query immer noch lahm, mach mal ein "explain" auf die query und poste das Ergebnis hier.
 
OK, Dankeschön schonmal für den Hinweis mit den INNER JOIN.
Leider haperts noch bei der Umsetzung, hast du da ein Beispiel?
 
Zurück
Oben