[MySql] Datenbank verwalten

traffic

Well-known member
5 Mai 2006
675
25
Hallo,

ich habe zur Zeit eine Datenbank bei meinem Hoster. In der einen Tabelle in dieser Datenbank habe ich 73 Spalten die mit Daten gefüllt werden. Es werden so um 40.000 Einträge(reihen) werden in dieser Tabelle.

Nun ist meine Frage, ob es sinnvoll wäre, wenn ich diese Tabelle in mehrere Tabellen unterteile, wenn ein User auf meiner Page in der Tabelle nach einem Stichwort sucht. Würde dadurch die Suchgeschwindigkeit schneller?

MfG
Traffic
 
Neija 73 Spalten ist eine argh schlechte Datenbankstruktur ich denke das solltest schon optimieren, alleine schon um die parallelen Zugriffe auf Datensätze zu erhöhen. Intelligent aufgeteilt werden die Tabellen dann um ein vielfaches schneller ;)
 
Neija 73 Spalten ist eine argh schlechte Datenbankstruktur ich denke das solltest schon optimieren, alleine schon um die parallelen Zugriffe auf Datensätze zu erhöhen. Intelligent aufgeteilt werden die Tabellen dann um ein vielfaches schneller ;)

zur zeit habe ich von dieser tabelle, 2 "unter"-tabellen die diese verkleinert.
Kann diese Tabelle (mit 73 spalten) noch verkürzen auf 50 spalte vielleicht.

Habe 5 Kategorien, wollte nun fragen ob es sinnvoll wäre zu jeder Kategorie eine Tabelle zu machen? So dass die 40000 Einträge nicht nur in der einen Tabelle wären. Würde so der Zugriff schneller?
 
zur zeit habe ich von dieser tabelle, 2 "unter"-tabellen die diese verkleinert.
Kann diese Tabelle (mit 73 spalten) noch verkürzen auf 50 spalte vielleicht.
50 Spalten sind immernoch viel zu viel, du solltest dir vllt mal die Normalformen ansehen, dann siehst du, dass man keine 50 Spalten pro Tabelle braucht.

Habe 5 Kategorien, wollte nun fragen ob es sinnvoll wäre zu jeder Kategorie eine Tabelle zu machen? So dass die 40000 Einträge nicht nur in der einen Tabelle wären. Würde so der Zugriff schneller?
hmm, verstehe ich nicht, sieh dir die Normalformen an ;)
 
50 Spalten sind immernoch viel zu viel, du solltest dir vllt mal die Normalformen ansehen, dann siehst du, dass man keine 50 Spalten pro Tabelle braucht.


hmm, verstehe ich nicht, sieh dir die Normalformen an ;)


also ich habe eine datenbank mit 5 tabellen und insgesamt 40.000 einträgen

oder ich habe eine datenbank mit 1 tabelle uns 40.000 einträgen


würde man den unterschied beim laden (wenn ein user in der datenbank sucht) merken?
 
Kommt drauf an, ob du dann nicht Daten aus allen 5 Teilen gleichzeitig brauchst. Dann machst du dir den Vorteil der Teilung wieder durch zusammenJOINen kaputt.

Poste halt mal die Struktur der Tabelle(n), damit wir wissen, um was es geht.
In 9 von 10 Fällen kann man nämlich so viele Spalten auf einen Fehler im Datenbankdesign (Verstoß gegen die Normalformen) zurückführen und aus den 70 Spalten eine zusätzliche Untertabelle mit nur 2 oder 3 Spalten machen ;)
 
Kommt drauf an, ob du dann nicht Daten aus allen 5 Teilen gleichzeitig brauchst. Dann machst du dir den Vorteil der Teilung wieder durch zusammenJOINen kaputt.

Poste halt mal die Struktur der Tabelle(n), damit wir wissen, um was es geht.
In 9 von 10 Fällen kann man nämlich so viele Spalten auf einen Fehler im Datenbankdesign (Verstoß gegen die Normalformen) zurückführen und aus den 70 Spalten eine zusätzliche Untertabelle mit nur 2 oder 3 Spalten machen ;)

hoffe, dass es das war was du meintest:

 
Wie ich mir dachte ;)
Das Design kannst du in die Tonne kloppen, das belastet wohl jede Datenbank zu Tode :LOL:

  • Alle typxxx-Felder auslagern in eine extra Tabelle mit 3 Spalten: PRIMARY, xxx und den Wert
  • Menge, Listenpreis, etc. sind VARCHAR(255) ? Nie im Leben. Nimm passende Felder
  • Was steht in Typxxx drin ?
  • Sind hier wirklich überall 255 Zeichen erforderlich ? 'n Auto mit 255 Zeichen ? Modell mit 255 Zeichen ? ... ?
Da hast du einiges zum Verbessern.

Lies dir doch bitte erstmal die Doku durch, welche Datentypen MySQL anbietet. Dann gucken wir uns das große Problem mit den Typ-Feldern an.
 
Wie ich mir dachte ;)
Das Design kannst du in die Tonne kloppen, das belastet wohl jede Datenbank zu Tode :LOL:

  • Alle typxxx-Felder auslagern in eine extra Tabelle mit 3 Spalten: PRIMARY, xxx und den Wert
  • Menge, Listenpreis, etc. sind VARCHAR(255) ? Nie im Leben. Nimm passende Felder
  • Was steht in Typxxx drin ?
  • Sind hier wirklich überall 255 Zeichen erforderlich ? 'n Auto mit 255 Zeichen ? Modell mit 255 Zeichen ? ... ?
Da hast du einiges zum Verbessern.

Lies dir doch bitte erstmal die Doku durch, welche Datentypen MySQL anbietet. Dann gucken wir uns das große Problem mit den Typ-Feldern an.

typXXX sind die motortypen von den fahrzeugen, also 1,6l 55kW
und da ein artikel bis zu 30 verschiedene typen haben kann halt 30 typxxx.

werde ich mir mal durchlesen, danke
 
typXXX sind die motortypen von den fahrzeugen, also 1,6l 55kW
und da ein artikel bis zu 30 verschiedene typen haben kann halt 30 typxxx.
"Bis zu" korrekt. Und wenn er nur einen hat ? Dann verschwendest du 29 Spalten. Und wenn er 31 hat ? Tja, dann beißt du dich in'n Hintern :p

Vorgehensweise an der Struktur:
  • Lösche alle typxxx-Felder aus der Auto-Tabelle
  • Lege eine Tabelle AutoMotortypen an, mit 3 Feldern:
    • AutoID - bekommt die ID aus deiner Auto-Tabelle (Fremdschlüssel)
    • TypID - AUTO_INCREMENT (Teil-Primärschlüssel)
    • Value - hier kannst du dann das "1,6l whatever" reinschreiben
    • PRIMARY (AutoID, TypID)
Prinzip klar ?
 
ja, das prinzip ist mir klar ;)

danke, werde es so ändern.
Wenn ich die Tabelle in 5 kategorie-tabellen teile und der user dann nur in der einen tabelle nach einen artikel sucht, ist dann die suche schneller?
 
du sollst die Tabelle nicht einfach nur aufteilen, sondern in eine Normalform bringen und ich versichere dir, deine Anwendung wird sicherlich um den Faktor 30 schneller.
Das Design ist mal echt das geilste Negativbeispiel, danke, werde ich mal abspeichern und vllt irgendwann mal in nem Artikel über Normalisierung verwenden, wenn du mir die Nutzung des Bilder erlaubst.