PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   MySQL-Leistungsfrage (http://www.selfphp.de/forum/showthread.php?t=20698)

Darelius 08.01.2009 06:12:23

MySQL-Leistungsfrage
 
Hallo, ich habe eine kurze, einfache Frage, die Antwort dürfe (vermutlich) nicht so einfach sein, fürchte ich.

Ich bräuchte ein paar Angaben über Geschwindigkeit und Leistung von MySQL-Datenbanken, wie ich sie am besten benutze.

Soll man lieber mehrere Tabellen nehmen, die mittellang sind (mehrere ERkennungs-IDs), oder lieber wenige, dafür umso längere Tabellen nehmen (haben dann um die 20 oder mehr Einträge) oder lieber mehrere kurze Tabellen, die dann mehrfache Einträge für eine Information haben?

Da ich kein Datenbankprofi bin, hier eine Art Beispiel:

Ich habe mehrer IDs, die zusammen eine exakte, individuelle Zuordnung geben. Es sind (normalerweise) 6 ID-nummern, die damit in jeder Tabelle fest vorhanden sind.

Nun habe ich etwa 20-30 Daten über ein "Objekt", welche in der Tabelle oder den Tabellen gespeichert werden.

Mein Problem ist folgendes:

Ich könnte in einer Tabelle alle 20 bis 30 Angaben hintereinander erstellen, daß es praktisch eine Zeile ist, die ausgelesen wird und alles beinhaltet.

Die nöchste Option, ich könnte nur 2-3 Einträge haben und damit mehrer Zeilen für dieses eine Objekt, was aber die Anzahl der Spalten verkürzen würde.

Was ist nun sinnvoller, damit die Datenbank vor allem bei sehr velen Abfragen schnell ist? Mehrere, "kurze" Zeilen oder eine lange Zeile?

Um die Gegenfrage vorweg zu nehmen, wenn Informationen über das "Objekt" gebraucht werden, sind oft viele, aber nicht immer zwingend alle Angaben erforderlich (für die Berechnung braucht man beispielsweise nicht den "Namen" des Objektes).


...DX

schrubba 08.01.2009 10:59:48

AW: MySQL-Leistungsfrage
 
Hi,

was Du meinst, ist der Vergleich von normalisierten Tabellen und denormalisierten Tabellen. Wenn Du danach im Netz suchst, dann wirst Du massenhaft endlose Diskussionen darüber finden und nicht wirklich schlauer danach sein.

Nach meiner doch eher mageren Erfahrung kann man das nicht pauschal beantworten, es kommt ganz auf den Einsatz an. Hier mal meine Erkenntnisse aus persönlichen Testungen.

1. Ein z.B. "SELECT * FROM ..." ist der Performancekiller schlechthin bei denormalisierten Tabellen. Solltest Du Dich also für denormalisierte Tabellen entscheiden, vermeide das unbedingt.

2. Eine Anwendung basierend auf denormalisierten Tabellen hat einen noch, für mich persönlich entscheidenen Nachteil, sie sind schlecht bzw. nur mit erhöhtem Aufwand erweiterbar. D.h. willst Du ein neues Feature in Dein Projekt einbauen, musst Du an jede Abfrage ran, die auf diese Tabelle zugreift, bei normalisierten Tabellen hast Du dieses Problem nicht bzw. nicht in diesem Ausmaß.

3. Auf der anderen Seite erweist sich (unter Umständen) bei normalisierten Tabellen der PHP-Code etwas umfangreicher und dadurch träger, langsamer, aber das hängt auch stark von der Art des Projektes ab.

4. Zu stark normaliserte DB können auch durch die etlichen JOINS an Performance verlieren.


Wie gesagt, das ist nur meine Erfahrung und mein Projekt besteht aus einer gemischten DB, mit ca. 70% normalisierten Tabellen und der Rest ist denormalisiert.

Gruß
schrubba


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:45:55 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.