Ich richte eine Tabelle mit mehr als 70 Spalten ein. Ich denke jetzt darüber nach, es aufzuteilen, da einige der Daten in den Spalten nicht jedes Mal benötigt werden, wenn auf die Tabelle zugegriffen wird. Wenn ich das mache, muss ich keine Joins mehr verwenden.
Wann, wenn überhaupt, werden zu viele Spalten berücksichtigt?
Antworten:
Es wird als zu viele angesehen, sobald es über der von der Datenbank unterstützten Höchstgrenze liegt .
Die Tatsache, dass nicht jede Spalte von jeder Abfrage zurückgegeben werden muss, ist völlig normal. Aus diesem Grund können Sie mit der SELECT-Anweisung die benötigten Spalten explizit benennen.
In der Regel sollte Ihre Tabellenstruktur Ihr Domänenmodell widerspiegeln. Wenn Sie wirklich 70 (100, was haben Sie) Attribute haben, die zu derselben Entität gehören, gibt es keinen Grund, sie in mehrere Tabellen aufzuteilen.
quelle
select count(*) from votes
jedes Mal berechnet wird, oder denkst du, dass sie vielleicht denormalisiert ist? Macht das die SO-Datenbank schlecht und Jeff Atwood verrückt?Es gibt einige Vorteile, die Tabelle in mehrere mit weniger Spalten aufzuteilen, was auch als vertikale Partitionierung bezeichnet wird . Hier sind ein paar:
Wenn Sie Tabellen mit vielen Zeilen haben, kann das Ändern der Indizes sehr lange dauern, da MySQL alle Indizes in der Tabelle neu erstellen muss. Die Aufteilung der Indizes auf mehrere Tabellen könnte dies beschleunigen.
Abhängig von Ihren Abfragen und Spaltentypen schreibt MySQL möglicherweise temporäre Tabellen (die in komplexeren Auswahlabfragen verwendet werden) auf die Festplatte. Dies ist schlecht, da Disk I / O ein großer Flaschenhals sein kann. Dies tritt auf, wenn die Abfrage Binärdaten (Text oder Blob) enthält.
Eine breitere Tabelle kann zu einer langsameren Abfrageleistung führen.
Optimieren Sie nicht vorzeitig, aber in einigen Fällen können Sie Verbesserungen durch engere Tabellen erzielen.
quelle
Es sind zu viele, wenn es gegen die Normalisierungsregeln verstößt. Es ist ziemlich schwierig, so viele Spalten zu erhalten, wenn Sie Ihre Datenbank normalisieren. Entwerfen Sie Ihre Datenbank so, dass das Problem modelliert wird, und nicht nach künstlichen Regeln oder Ideen zur Optimierung für eine bestimmte Datenbankplattform.
Wenden Sie die folgenden Regeln auf die breite Tabelle an, und Sie werden wahrscheinlich weit weniger Spalten in einer einzelnen Tabelle haben.
Hier ist ein Link , der Ihnen weiterhilft.
quelle
It is pretty hard to get that many columns if you are normalizing your database.
Nicht so schwer wie es scheint.Dies ist kein Problem, es sei denn, alle Attribute gehören zur gleichen Entität und sind nicht voneinander abhängig. Um das Leben zu vereinfachen, können Sie eine Textspalte mit einem JSON-Array speichern. Wenn Sie kein Problem damit haben, jedes Mal alle Attribute abzurufen. Dies würde zwar den Zweck der Speicherung in einem RDBMS völlig zunichte machen und jede Datenbanktransaktion erheblich erschweren. Daher wird der Ansatz in der gesamten Datenbank nicht empfohlen.
quelle
Zu viele Spalten in derselben Tabelle können ebenfalls große Probleme bei der Replikation verursachen. Sie sollten wissen, dass die Änderungen, die im Master vorgenommen werden, auf den Slave repliziert werden. Wenn Sie beispielsweise ein Feld in der Tabelle aktualisieren, ist die gesamte Zeile w
quelle