Philipp Hasenfratz: SQL-Abfrage zwingt Server in die Knie

Beitrag lesen

Halihallo mo

Führe ich die Abfrage aus, geht der Server in die Knie.

Das liegt bei der kleinen Datenmenge sicher nicht an MySQL, sondern am Server.

Wie könnte ich die Abfrage optimieren?
Query:
SELECT a.name_1, b.name_1, b.name_2, b.telefon, b.email, b.konto FROM g600 AS a, g620 AS b WHERE a.konto=b.konto AND a.name_1 LIKE '%meier%' OR b.name_1 LIKE '%meier%' OR b.name_2 LIKE '%meier%' OR b.telefon LIKE '%meier%' OR b.email LIKE '%meier%' OR b.konto LIKE '%meier%' ORDER BY a.name_1 ASC, b.name_1 ASC;

LIKE '%...%' sind absolute Performancefresser, derartige Konstruktur erfodern einen
Full Table Scan => jeden einzelnen Record durchforsten. Wenn es die Aufgabestellung
ermöglicht, ist LIKE '...%' (ohne erstes %) mit Index tausendmal effizienter.

Keine Ahnung, warum der MySQL-Server aussteigt, ich würde mal versuchen neu zu
installieren, da dieses Verhalten bei 40MB nicht wirklich glaubhaft ist.

Kannst auch versuchen mit temporären Tabellen zu arbeiten (Speicherung aber dennoch
auf Platte). Beide Tabellen in eine schreiben, sodass die Datenbank keinen JOIN berechnen
muss (MySQL versucht die Daten erst im RAM-Speicher zu halten), damit verbrauchst du
weniger RAM-Speicher, aber mehr Performance (kommt eben darauf an, _was_ die DB in die
Knie zwingt).

Viele Grüsse

Philipp