Cruz: MySQL > Datenbank-Konzept m. relationaler Datenbank

Beitrag lesen

Hallo Guma,

probieren geht über studieren. Investier doch mal ein bisschen Zeit in einen gründlichen Performancetest. Lass dein PHP Skript so wie es ist und schreib ein zusätzliches, was dir in automatisierter Form ein Performancetest durchführt, indem es inkrementell die Tabellen mit immer mehr künstlich erzeugten Daten füllt und danach das PHP Skript aufruft und die Zeit nimmt, wie lange das Script braucht um fertig zu werden. Oder setze in Perf.testskript direkt das SELECT mit JOIN ab, um dich rein auf die Dauer der Datenbankabfrage zu konzentrieren. Es kann ja sein, dass das PHP Skript selbst bei grossen Datenmengen zum Problem wird, wenn es unglücklich programmiert wird. Dann kriegst du ein Gefühl dafür wie viele Daten tatsächlich vorliegen müssen, damit die Abfragegeschwindigkeit spürbar in die Knie geht.

In die Spalte "alleleistungen" schreibe ich mit Komma separiert die gewählten Leistungen der Kunden beim speichern gleich mit rein.

Das halte ich für eine sehr schlechte Strategie. Du erzeugst damit sowohl eine Redundanz, als auch eine Abhängigkeit, da diese Spalte mit Tabelle 2 immer snychron gehalten werden muss.

Zwei Vorschläge habe ich noch, wie du die Performance möglicherweise verbessern könntest, obwohl es vielleicht niemals notwendig wird.

1. Ich kann mir gut vorstellen, dass in der 2. Tabelle für die Leistungen viele Einträge doppelt und mehrfach vorkommen, weil z.B. mehrere Kunden die Leistung "Golfen" beanspruchen. Erstelle eine atomare Tabelle für die Leistungen, also keine Leistung doppelt, und führe eine dritte Tabelle ein, die nur für die Zuordnung von Leistungen zu Kunden verwantwortlich ist.

2. Anstatt für jeden Kunden immer wieder eine neue Abfrage in die Datenbank zu schicken, kannst du sicherlich eine einzige Abfrage geschickt so formulieren, dass sie eine Ergebnistabelle zurückgibt,
die den zusammengesetzten Ergebnissen der einzelnen Abfragen entspricht. Dann muss mysql nur ein einziges mal JOINen.

Ansonsten kannst du dich noch unter dem Stichwort "INDEX" schlau machen, wie du deine Tabellen geschickt indizieren kannst. Da du anscheinend nur über INTEGER Felder JOINts, weiss ich jetzt nicht genau, ob ein INDEX überhaupt was bringt, aber besser mal nachgeschlagen.

Gruß,
Cruz