Hallo,
EXPLAIN SELECT m.user_id, m.berecht, v.branche1, v.branche2, v.branche3, v.mo_v1, v.mo_v2, v.mo_n1, v.mo_n2, v.di_v1, v.di_v2, v.di_n1, v.di_n2, v.mi_v1, v.mi_v2, v.mi_n1, v.mi_n2, v.do_v1, v.do_v2, v.do_n1, v.do_n2, v.fr_v1, v.fr_v2, v.fr_n1, v.fr_n2, v.sa_v1, v.sa_v2, v.sa_n1, v.sa_n2, v.so_v1, v.so_v2, v.so_n1, v.so_n2, m.firma, m.strasse, m.plz, m.ort, m.tel, m.email, m.homepage, MIN(w.start), MAX(w.end) FROM (verzeichnis AS v INNER JOIN member AS m USING (user_id) LEFT JOIN werbung AS w ON m.user_id=w.user_id) WHERE (MATCH (m.firma,m.name,m.vorname,m.strasse) AGAINST ('+anwalt*' IN BOOLEAN MODE) OR MATCH (v.begriffe) AGAINST ('+anwalt*' IN BOOLEAN MODE)) GROUP BY m.user_id ORDER BY m.firma
Zwischen den beiden MATCH(...) AGAINST(...) habe ich aus dem OR ein AND gemacht - und es funzt nun! Die Abfrage ist in wenigen ms ausgeführt! Mein Glaube an MySQL ist wieder da ;-)!
Das ändert aber den ganzen Sinn der Abfrage entscheidend. Natürlich ist eine AND-Verknüpfung besser für die Nutzung des Index auf v.begriffe, aber es werden auch entsprechend weniger Datensätze der Bedingung entsprechen. Meiner Meinung nach, solltest Du eher einen Index auf v.user_id versuchen. Den Index auf m.user_id gibt's ja schon.
viele Grüße
Axel