MySQL-Volltext-Suche sehr langsam mit joined Tabellen

bekay

Mitglied
Nehmen wir an, ich hab zwei Tabellen, einmal eine Film-Tabelle und einmal eine Artikel-Tabelle, hier mal eine vereinfachtes Spalten-Schema

Code:
| ID | Titel | Regie |
--> ID ist der Primärschlüssel, Regie hat einen Fulltext-Index, für eine schnelle UTF8-Suche. In dieser Datenbank habe ich 10.000 Filme gespeichert - natürlich mit noch mehr Spalten/Infos, das ist aber unwichtig für das Beispiel.

Code:
| ID | Name | Link |
--> In dieser Tabelle sind Artikel von bestimmen Autoren (Name und Link) zu einem gewissen Film (ID --> Verbindung zur Film-Tabelle) gespeichert. Hier gibt es 30.000 Einträge.

Die einfache Volltext-Suche in der Film-Tabelle, z.B. nach einem Regisseur geht schnell von statten:
Code:
SELECT * FROM `film` WHERE MATCH (regie) AGAINST ('+spielberg' IN BOOLEAN MODE)
--> 0.0008 sek.

Suche ich hingegen nach den Artikeln, die von einem bestimmten Autoren nur über Spielberg-Filme verfasst wurden, greife ich auf JOIN zurück:
Code:
SELECT * FROM artikel INNER JOIN film ON
(artikel.ID=film.ID)
WHERE artikel.name='ein Autor' 
AND  MATCH (film.regie) AGAINST ('+spielberg' IN BOOLEAN MODE)
--> 2.6145 sek.

2,5 Sekunden für eine relativ einfach Anfrage! Irgendwie muss ich da was falsch machen, bei der Verbindung der Volltext-Suche mit der JOIN-Funktion. Kann ich die Performance verbessern?
 
Zuletzt bearbeitet:
Okay, frage ich anders: Ist es möglich, nicht einfach nur zwei Tabellen zu joinen, sondern auch eine Auswahl von Daten einer Tabelle mit einer anderen Tabelle zu joinen. Also vor dem Join schon Zeilen vorselektieren, die verknüpft werden sollen. Da ich ehrlich gesagt wenig Ahnung habe von den komplexeren MySQL Anfragen habe, weiß ich das nicht... Sowas würde aber wohl die Suche entsprechend schneller machen.
 
Zuletzt bearbeitet:
Hab die Lösung selbst gefunden, in dem ich vor dem Join eine Subquery eingebaut habe:

Code:
SELECT * FROM artikel INNER JOIN 
(
SELECT * FROM film WHERE 
MATCH (film.regie) AGAINST ('+spielberg' IN BOOLEAN MODE)
) 
AS film_auswahl
ON
(artikel.ID=film_auswahl.ID)
WHERE artikel.name='ein Autor'
 
Zurück