Sven Rautenberg: MySQL > Datenbank-Konzept m. relationaler Datenbank

Beitrag lesen

Moin!

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:

Wie kriegst du es denn hin, die Leistungen mit den Kunden zu verknüpfen? Üblicherweise würde man das doch als n:m-Beziehung gestalten, d.h. du hast insgesamt DREI Tabellen.

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?!

Deine "Kann"-Frage muß man eindeutig mit Ja beantworten: Ja, das KANN sein. Muß aber nicht, wenn man es vernünftig macht.

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.

Das ist nach meiner Meinung schlimmer, weil du zwingend nach %WORT% suchen mußt - das aber bedeuten einen Full Table Scan über die gesamte Kundentabelle, während beim JOIN ein Index genutzt werden könnte. Indexsuche ist meist deutlich schneller, als komplette Tabellensuchen im gesamten Datenbestand.

Fragen: Ist LIKE über ein feld mit 20-40 Wörtern besser und schneller als ein JOIN über 45.000 Datensätze?

Nein, nur in Ausnahmefällen, in der Regel aber nicht. Weil du kein LIKE über 20-40 Wörter machst, sondern über 9000 Kundendatensätze.

Ein JOIN über 45.000 Datensätze könnte ja immerhin einen Index benutzen, wenn einer definiert ist. Das weiß man aber nur, wenn man seine Querys erstens von der Laufzeit her analysiert und zweitens von ihrer Indexnutzung her. Der Befehl EXPLAIN ist bei zweiterem unabdingbar.

Wie geht ihr mit einer solchen Datenmenge um?

Das sind doch keine Datenmengen, das ist noch Popelkram.

Allerdings ist deine Datenbankstruktur mutmaßlich extrem suboptimal aufgebaut, wie ich im ersten Absatz ja andeutete.

- Sven Rautenberg

--
"Love your nation - respect the others."