Vinzenz Mai: Vereinfachung von Mysql-querys

Beitrag lesen

Hallo,

Wenn nun alle eigenen Bücher (userid = $_SESSION["userid"]) angezeigt werden, habe ich eine Suche gemacht, die sofort nach jeder Eingabe eines Buchstabens die ganzen "eigenen" Bücher, Lektionen und Wörter durchgeht und prüft, ob die aktuelle Eingabe im Buchnamen, Lektionennamen, sprache1 oder sprache2 vorhanden ist und die dazugehörigen Buch-ID ausgibt. Dazu habe ich folgende Abfrage geschrieben:

Diese Abfrage dauert bei mir jedoch ca. 22 Sekunden, was viel zu lang ist!
Kann ich diese Subquerys nicht verbessern, damit z.B. nicht mehr die ganze Wörter-Tabelle durchgetestet werden muss (habe das mit EXPLAIN SELECT gesehen, dass alle wörter durchgetestet werden müssen).

mit einer Volltextsuche, sonst nicht.

Abfragen vom Typ LIKE '%irgendwas%' können grundsätzlich *nicht* von einem Index profitieren und sind *immer* langsam. In Deinem Fall sehr spürbar langsam. Solche Abfragen nach jedem Buchstaben abzufeuern ist erst recht keine gute Idee.

Ach ja, Deine beiden bisherigen Fragen zum gleichen Thema waren unzulässige Vereinfachungen:

</archiv/2010/6/t198397/#m1332267>
</archiv/2010/3/t196307/#m1315065>

Das Jokerzeichen % zu Beginn verhindert effektiv, dass Indexe genutzt werden können. Ohne Index *muss* jeder Datensatz einzeln geprüft werden. Wegen OR je Datensatz zwei Spalten.

Freundliche Grüße

Vinzenz