lixx: mySQL: Statische Tabellenbreite

Hallo Leute!

Ich habe eine Frage zu statische Tabellenbreiten. In meiner Datenbank habe ich eine Tabelle für User mit alle Eigenschaften. Irgendwo habe ich gelesen, dass die Performace erhöht werden kann, wenn Tabellen starr und nicht dynamisch angelegt werden. Da die Felder in der User-Tabelle hauptsächlich mit vorhersagbaren Längen beschrieben werden, habe ich mich nun dazu entschlossen sie starr zu machen.

Bei der Erweiterung ist allerdings nun ein Problem aufgetaucht. Jedem User soll nun ein description-Feld hinzugefügt werden. Die Länge des Textes, die der User eingeben kann, soll auch bestimmt werden, soll aber über die 255 liegen. Nun ist aber die Frage, wie lang kann/soll eine Zeile werden, damit sie noch effizent arbeitet? Zur Zeit ist sie etwa 6.000 Zeichen lang und es sind in etwa 800 User die regelmäßig zugreifen werden.

Hoffe ihr könnt mir bei der Frage weiterhelfen.

lg lixx

  1. Hi,

    Ich habe eine Frage zu statische Tabellenbreiten. In meiner Datenbank habe ich eine Tabelle für User mit alle Eigenschaften. Irgendwo habe ich gelesen, dass die Performace erhöht werden kann, wenn Tabellen starr und nicht dynamisch angelegt werden. Da die Felder in der User-Tabelle hauptsächlich mit vorhersagbaren Längen beschrieben werden, habe ich mich nun dazu entschlossen sie starr zu machen.

    Wieviele Millionen User erwartest Du?

    Zur Zeit ist sie etwa 6.000 Zeichen lang und es sind in etwa 800 User die regelmäßig zugreifen werden.

    Niedlich. Also ne sehr kleine Datenmenge.

    Was sich wesentlich stärker auf die Zugriffszeiten auswirken dürfte, sind die verwendeten Indexe. Passen die Index-Definitionen zu den häufig(st)en Abfragen auf der Tabelle?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo Andreas!

      Was sich wesentlich stärker auf die Zugriffszeiten auswirken dürfte, sind die verwendeten Indexe. Passen die Index-Definitionen zu den häufig(st)en Abfragen auf der Tabelle?

      Das mit den Indizes ist mir bekannt. Diese werden noch eingerichtet.

      Zur Zeit ist sie etwa 6.000 Zeichen lang und es sind in etwa 800 User die regelmäßig zugreifen werden.

      Niedlich. Also ne sehr kleine Datenmenge.

      hihi, Du meinst also da geht noch mehr! Die Anzahl der User ist da nicht wirklich groß, aber es wird eine häufige Anzahl an Zugriffen der einzelnen User erwartet. Konkret soll es einmal ein Browsergame werden.

      lg lixx

  2. echo $begrüßung;

    Ich habe eine Frage zu statische Tabellenbreiten.

    Alles was über die interne Speicherung der Daten zu wissen wichtig ist, ist im Kapitel Storage Engines and Table Types beschrieben. Du musst dabei die Eigenarten der jeweiligen Tabellentypen berücksichtigen.

    Auf alle Fälle gilt: Performancemessungen vor und nach der "Optimierung" durchführen, damit du prüfen kannst, ob es auch wirklich eine Optimierung war, und du damit wirklich eine signifikante Performanceerhöhung erreicht hast.

    echo "$verabschiedung $name";

  3. Moin!

    Irgendwo habe ich gelesen, dass die Performace erhöht werden kann, wenn Tabellen starr und nicht dynamisch angelegt werden.

    Stimmt, Betonung auf "KANN".

    Die Verwendung von festen Feldlängen in MySQL ist ja nicht so ganz einfach zu erreichen: Alle starren Felder werden automatisch in dynamische Felder verwandelt, wenn sie in einer Tabelle gemischt auftreten.

    Außerdem kann diese Taktik auch genausogut negative Auswirkungen haben: Durch die feste Feldlänge wird logischerweise deutlich mehr Speicherplatz verbraucht, so dass Festplattencaching weniger effektiv wird.

    Deshalb: Löse Performanceprobleme genau dann, wenn sie tatsächlich auftreten - nicht vorher. Und wenn du auf der Suche nach mehr Performance an dem System herumschraubst, ist es zwingend erforderlich, dass du messen kannst, ob die Performance durch eine Änderung tatsächlich gesteigert wurde - es wäre nicht das erste Mal, dass genau das Gegenteil erreicht wird.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. echo $begrüßung;

      Die Verwendung von festen Feldlängen in MySQL ist ja nicht so ganz einfach zu erreichen: Alle starren Felder werden automatisch in dynamische Felder verwandelt, wenn sie in einer Tabelle gemischt auftreten.

      So schwierig ist das auch wieder nicht. Für MyISAM ROW_FORMAT auf FIXED setzen und BLOB und TEXT vermeiden, fertig.

      echo "$verabschiedung $name";

      1. Danke für die Antworten! Werde mir das mal duch den Kopf gehen lassen ;)

        lg lixx