Geschwindigkeitsgewinn durch Normalisierung?

Hallo,

wird eine Datenbankabfrage(mySQL) schneller wenn ich die Daten normalisiere? Beispiel: ich habe eine Datenbank in der Songtexte gespeichert werden, da kommt es ja zwangsläufig zu Redundanzen(Interpret, Album …). Also baue ich je eine Tabelle Songtexte, Interpret, Album und mache dann eine verknüpfte Abfrage. Nun ist die Frage braucht die Datenbank mehr Zeit um x kleine Tabellen zu verknüpfen oder ist es besser alles in eine große Tabelle zu werfen? Da es sich dabei um ein Webprojekt handelt wäre selbst ein winziger Geschwindigkeitsgewinn von Vorteil.

Wer kann mir ein Buch oder eine Webpage empfehlen, wo das Thema Normalisierung ausführlich und mit guten Beispielen erklärt wird.

Danke Jan

Hi,
im Gegenteil: durch Normalisierung wird der Datenzugriff im allgemeinen langsamer.

Normalisierung hat ihre Berechtigung bei der Datenpflege: willst Du sogenannte Anomalien vermeiden (s. Kelz aus der Brettbeschreibung für weitere Infos), dann solltest Du die Daten in verschiedene Tabellen stellen.
Jeder Join kostet aber Performance. Datenbanksysteme, die große Datenmengen verwalten, verzichten aus diesen Gründen häufig auf Normalisierung, da wird sogar denormalisiert (d.h. Daten, die normalisiert vorliegen, werden im voraus in denormalisierte Tabellen kopiert). Bei mancher Anwendung werden sogar aggregierte Daten im voraus berechnet, um einen performanten Zugriff zu ermitteln.

Es gilt also abzuwägen, ob der erzielte Performancegewinn den zusätzlichen Aufwand bei der Datenpflege und -kontrolle aufwiegt.

Allerdings: bei dem von Dir gewählten Beispiel (Songs, Interpreten, Alben) würde ich kaum annehmen, daß sich das lohnt. Erstens ist die Anzahl Tabellen übersichtlich klein, die Anzahl Datensätze pro Tabelle dürfte auch relaitv niedlich -äh- niedrig sein, und MySQL erledigt solche Aufgaben mit Bravour.

An Deiner Stelle würde ich es ausprobieren: mach mal ein Versuch mit 100000 Datensätzen und führe in einer Schleife mehrmals einen bestimmten Select. Die Zeit stoppst Du, und zwar bei beiden Varianten. Ich würde wetten, daß zwar ein Unterschied rauskommt, der sich aber nicht lohnt.

Gruß

J.

schönen morgen!

im Gegenteil: durch Normalisierung wird der Datenzugriff im
allgemeinen langsamer.

erklär das mal aber einen „analytiker“, der aus einer adresstabelle 128.319 (vielleicht ein bißchen übertrieben :wink: stammdatentabellen macht *grrr*

Jeder Join kostet aber Performance.

mit intelligenter index-erstellung kann dies jedoch weitestgehend vermieden werden (oracle hätte nie die bitmap-indizes rausbringen dürfen - rekord: bitmap-index auf tabelle mit 3 datensätzen :smile:

Datenbanksysteme, die
große Datenmengen verwalten, verzichten aus diesen Gründen
häufig auf Normalisierung, da wird sogar denormalisiert (d.h.
Daten, die normalisiert vorliegen, werden im voraus in
denormalisierte Tabellen kopiert). Bei mancher Anwendung
werden sogar aggregierte Daten im voraus berechnet, um einen
performanten Zugriff zu ermitteln.

zusatz: wird meist jedoch erst bei auswertesystemen offline angewandt, da ein online-arbeiten ziemlich langweilig wird …

Es gilt also abzuwägen, ob der erzielte Performancegewinn den
zusätzlichen Aufwand bei der Datenpflege und -kontrolle
aufwiegt.

wobei hier noch angemerkt werden soll, daß datawarehousing immer mehr oberhand gewinnt und so die datenmengen je datenbank in einem (relativ) übersichtlichen rahmen bleiben …

nachsatz: ich möchte keine applikation auf eine „auswerte-db“ (ist ein schimpfwort bei uns im büro) schreiben …

grüße,
tomh

Hi,

im Gegenteil: durch Normalisierung wird der Datenzugriff im
allgemeinen langsamer.

erklär das mal aber einen „analytiker“, der aus einer
adresstabelle 128.319 (vielleicht ein bißchen übertrieben :wink:
stammdatentabellen macht *grrr*

Hmmm, hat der Analytiker seien Kenntnisse mit Access erworben? *g*

Jeder Join kostet aber Performance.

mit intelligenter index-erstellung kann dies jedoch
weitestgehend vermieden werden (oracle hätte nie die
bitmap-indizes rausbringen dürfen - rekord: bitmap-index auf
tabelle mit 3 datensätzen :smile:

Jau. Ich sprach vom allgemeinen Fall, und MySQL kennt (noch?) weder Bitmaps noch partitionierte Tabellen, die auch die Zugriffe optimieren helfen…

wobei hier noch angemerkt werden soll, daß datawarehousing
immer mehr oberhand gewinnt und so die datenmengen je
datenbank in einem (relativ) übersichtlichen rahmen bleiben

Das habe ich nicht verstanden: datawarehousing mit vielen, kleinen, unabhängigen Datenbanken? Ist das kein Widerspruch?

nachsatz: ich möchte keine applikation auf eine „auswerte-db“
(ist ein schimpfwort bei uns im büro) schreiben …

Och… hat alles irgendwie auch seinen Reiz…

Gruß

J.

schimpfwörter :smile:

nachsatz: ich möchte keine applikation auf eine „auswerte-db“
(ist ein schimpfwort bei uns im büro) schreiben …

Hi

lustig was sich manchmal so als schimpfwort durchsetzt.
bei uns ist „Data Becker Programmierer“ eines der übelsten Schimpfwörter. (Ein Programmierer der sich sein Wissen mit Data Becker Bücher angeeignet hat)
:wink:

Gruss

lustig was sich manchmal so als schimpfwort durchsetzt.
bei uns ist „Data Becker Programmierer“ eines der übelsten
Schimpfwörter. (Ein Programmierer der sich sein Wissen mit
Data Becker Bücher angeeignet hat)
:wink:

*g* bei uns sind das die „wifi-programmierer“ (wifi = österreichisches "fortbildungs"institut … so ungefähr „db-admin in 5 tagen, keine edv-vorkenntnisse erforderlich“)

grüße,
tomh

morgen!

wobei hier noch angemerkt werden soll, daß datawarehousing
immer mehr oberhand gewinnt und so die datenmengen je
datenbank in einem (relativ) übersichtlichen rahmen bleiben

Das habe ich nicht verstanden: datawarehousing mit vielen,
kleinen, unabhängigen Datenbanken? Ist das kein Widerspruch?

„unabhängig“ ist wohl nicht ganz der richtige begriff (f*** schnittstellenprogrammierung) … ich meinte nicht „kleine, unabhängige“ datenbanken, sondern eher „zu große, unüberschaubare“ datenbanken in ein datawarehouse aufgliedern bzw. das verknüpfen dieser bereits existierenden unabhängigen db’s …

puh, so früh am morgen und schon plappere ich mich in jenes thema rein, daß ich nicht leiden kann …

by the way: welche db ist schon unabhängig …

grüße,
tomh