Ich habe hier eine (relativ zufällig rausgepickte) MySQL-Abfrage für eine Spruch-Suche für meine Webseite:
Code:
SELECT spruch . *
FROM spruch, skat
WHERE 1
AND spruch.lng = 'de'
AND (
spruch.spruch LIKE "%a%"
OR spruch.spruch LIKE "a%"
OR spruch.spruch LIKE "%a"
)
AND spruch.autor LIKE "%bla%"
AND spruch.date >1097359200
AND spruch.user LIKE "%e%"
AND (
spruch.vote_sum / spruch.vote_count
) >=1
AND kat.spruch_id = spruch.id
GROUP BY spruch.id
ORDER BY kat.kat_id ASC , spruch.date DESC
Nun ist diese Abfrage bei über 15.000 Sprüchen (Tendenz steigend) ziemlich langsam.
Was kann ich verbessern, damit sie schneller ausgeführt wird? Wo sind Sicherheitslücken & Risiken drin?
Zur Erklärung:
Ich habe 2 Tabellen, spruch (in der der Spruch eingetragen ist) und kat (wo eine Verknüpfung zwischen Spruch und Kategorie stattfindet).
Ich suche nach Sprüchen auf deutsch, in denen irgendwo im Spruch ein "a" vorkommt.
Der Autor ist "bla", die Sprüche sollen neuer als ein Datum sein.
Der Benutzer, der den Spruch eingetragen hat, soll ein "e" im Namen haben und die Bewertung (bewertungen/bewertende) soll 1 oder besser sein.
Sortiert wird das ganze nach Kategorie (und dann nach Datum). Da ein Spruch mehrere Kategorien haben kann, aber nur 1x vorkommen soll, wird das alles per GROUP zusammengefasst.
Was kann ich daran noch verbessern?
Danke für eure Vor- und Ratschläge.
Xian