Die äußere Abfrage liefert nur die Dokumente zurück, deren ID bereits ermittelt wurde.
Ob mit "or", "in" oder "exists" dürfte kaum einen großen Unterschied darstellen.
Die eigentliche Bremse könnte die Verknüpfung aller Worte mit allen Dokumenten darstellen.
Neben dem verwendeten Index wirkt sich auch der Speicherverbrauch der Abfrage schnell auf die Geschwindigkeit aus.
Code:
SELECT id.docid
FROM ftiwid id
INNER JOIN ftiword w ON id.wordid = w.wordid
WHERE (w.word LIKE {s gesuchteswort%})
Ich würde es mit einem left join versuchen:
Code:
SELECT distinct id.docid
FROM ftiword w
left join ftiwid id ON id.wordid = w.wordid
WHERE (w.word LIKE {s gesuchteswort%})
Mehrfache Rückgabe des selben Dokuments ist hier nicht erwünscht (distinct).
Natürlich könnte man die Anzahl der Dokumente hier sinnvoll z.B. auf die ersten 200 begrenzen.