Hallo,
Ich möchte in einer Datenbank mehrere Tabellen über ein Feld "user_id" verknüpft volltextmäßig durchsuchen lassen. Habe in den Tabellen jeweils Fulltext-Indexe erstellt und in der SELECT-Abfrage JOIN verwendet. Das Problem ist nun, dass MYSQL nicht die Fulltext-Indexe verwendet,
Woran erkennst Du das?
Ach ja: Das ist meine Abfrage: 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))
^hier und ^hier würden mir als Interpreter Klammern fehlen.
LEFT JOIN werbung AS w ON m.user_id=w.user_id
WHERE (m.plz = '64347' OR v.plzen LIKE '%alle%'
[1]
OR v.plzen LIKE '%64347%' OR m.plz = '64343'
[2]
OR v.plzen LIKE '%alle%' OR v.plzen LIKE '%64343%'
[3] [4]
OR m.plz = '64344' OR v.plzen LIKE '%alle%'
[5]
OR v.plzen LIKE '%64344%' OR m.plz = '64345'
[6]
OR v.plzen LIKE '%alle%' OR v.plzen LIKE '%64345%')
[7] [8]
AND (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
Die mit [pf] gekennzeichneten Stellen sind die performance-fresser ;-)). Bei einem LIKE "%text%" kann der Text irgendwo mitten im Feldinhalt stehen. Das kann kein Index abdecken. Versuche das zu vermeiden. Meistens geht das nur durch Überdenken der Datenbankstruktur. Wieso kann in v.plzen irgendwas vor und irgendwas nach "alle" stehen? Muss das so sein? Wieso kann in v.plzen irgendwas vor und irgendwas nach der PLZ stehen? Muss das so sein?
viele Grüße
Axel