Hallo zusammen,
derzeit beschäftige ich mich viel mit relationalen Datenbanken unter MySQL 4.3. . Vor allem die Selectabfragen stellen den größten Geschwindigkeitsfaktor dar. Bei realtionalen Datenbanken habe ich mit Joins die Möglichkeit Datensätze aus zwei Tabellen zu verbinden. Dafür nutze ich z.B. Inner Join. Inklusivverknüpfungen erreiche ich mit Left Join. So jetzt stellt sich bei mir die Frage ob Join - Abfragen die Performance stark verlangsamen.
Dazu habe ich mir folgendes Überlegt:
Beispieldatenbank:
Tabelle 1: id, name, ort, plz, tel, email
Tabelle 2: id, leistung
Tabelle 1 enthält also Kundendaten wie Adresse und Kontaktdaten. Derzeit sind ca. 9.000 Kunden in der Tabelle 1.
Tabelle 2 enthält alle Leistungen, die über den Primärschlüssen id verknüpft sind. In meinem Fall haben einzelne Kunden so ca. 20-40 Leistungen. Das Inhalte der Tabelle 2 sehen dann so aus:
id | Leistung
----------------
1 | Golf
2 | Joggen
3 | Schwimmen
4 | Tauchen
5 | Surfen
... u.s.w.
So weit so gut. jetzt ist in den letzten Wochen meine Tabelle 2 sehr groß geworden: ca. 45.000 Datensätze sind jetzt drin. Tendenz steigend!
Die Abfrage der Datenbank:
Mein SELECT durchfostet mit Join neben der Tabelle 1 die Tabelle zwei durch. Beim Listen der Inhalte auf der Webseite (mit PHP) werden jetzt für jede gewählte Tabellenzeile mit Join alle 45.000 Einträgen nach passenden Leistungen durchsucht und mit ausgegeben.
Frage zur Geschwindkeit bei Verwendung von Joins:
Kann das nicht die Performance stark drücken? Derzeit dauert der Aufruf nicht all zu lang, nur wie wird es in der Zukunft sein?!
Jetzt habe ich mir folgende Alternative überlegt:
Tabelle 1: id, name, ort, plz, tel, email, alleleistungen
Tabelle 2: id, leistung
In die Spalte "alleleistungen" schreibe ich mit Komma separiert die gewählten Leistungen der Kunden beim speichern gleich mit rein. Nur im Redaktionssystem wird jetzt die Tabelle 2 genutzt. Die Ausgabe und Listung findet jetzt über ein SELECT statt, das ganz ohne Joins auskommt und nut Tabelle 1 nutzt. Es wird jetzt z.B. mit LIKE im der Spalte "alleleistungen" gesucht, anstatt die 45.000 Leistungen in Tabelle 2 nach passenden Einträgen zu durchforsten.
Fragen: Ist LIKE über ein feld mit 20-40 Wörtern besser und schneller als ein JOIN über 45.000 Datensätze? Wie geht ihr mit einer solchen Datenmenge um?
Danke fürs Lesen und Gedanken-Machen.
Es grüßt Euch Guma