Frage

In MySQL ist es im Allgemeinen schnellen / effiziente / skalierbar 100 Zeilen mit 3 Spalten zurückzugeben, oder 1 Zeile mit 100 Spalten?

Mit anderen Worten, wenn viele Schlüsselspeicher => Wertepaar zu einem Datensatz verknüpft, ist es besser, jede Taste = Paare> Wertes zu speichern in einer separaten Zeile mit der record_id als Schlüssel oder eine Reihe haben pro record_id mit einer Spalte für jede Taste?

Auch gehen auch davon aus, dass die Schlüssel müssen ziemlich regelmäßig hinzugefügt werden / entfernt, was ich auch die langfristige Wartbarkeit der vielen Spalte Ansatz beeinflussen annehmen würde, sobald der Tisch ausreichend groß wird.

Edit:. zu klären, durch „regelmäßig“ Ich meine das Hinzufügen oder Entfernen eines Schlüssels einmal im Monat oder so

War es hilfreich?

Lösung

Sie sollten nie Spalten auf einer regelmäßigen Basis hinzuzufügen oder zu entfernen.

Andere Tipps

http://en.wikipedia.org/wiki/Entity-Attribute-Value_model

Es gibt viele schlechte Dinge über dieses Modell und ich würde es nicht verwenden, wenn es eine andere Alternative. Wenn Sie nicht die Mehrheit kennen (außer ein paar Benutzer anpassbare Felder) von Datenspalten Sie für Ihre Anwendung benötigen, dann müssen Sie mehr Zeit in Design verbringen und es herausfinden.

Wenn Sie Ihre Schlüssel voreingestellt sind (zur Entwurfszeit bekannt), dann ja, sollten Sie jeden Schlüssel in einer separaten Spalte setzen.

Wenn sie in Design-Zeit nicht bekannt sind, dann haben Sie Ihre Daten als eine Liste von Schlüssel-Wert-Paaren zurück, die Sie später außerhalb des RDBMS analysieren sollten.

Wenn Sie Schlüssel / Wert-Paare speichern, sollten Sie eine Tabelle mit zwei Spalten, eine für den Schlüssel (machen dies die PK für den Tisch) und eine für den Wert (wahrscheinlich tun dies überhaupt nicht brauchen indiziert) . Denken Sie daran, „Der Schlüssel, den gesamten Schlüssel, und nichts als die Schlüssel.“

In der mehrspaltigen Ansatz, werden Sie feststellen, dass Sie Tabelle ohne Schranke wächst, weil die Säule entfernt werden alle Werte nuke und Sie werden es nicht tun wollen. Ich spreche hier aus Erfahrung auf einem Legacy-System gearbeitet, das mit fast 1000 Spalten einer Tabelle hatte, von denen die meisten Bit-Felder waren. Schließlich Sie aufhören, den Fall zu machen in der Lage, eine der Spalten zu löschen, weil jemand Macht sei es mit und das letzte Mal, wenn Sie es taten, mußten Sie arbeiten bis 2 zurück, um Sicherungen am rollen.

Erstens: bestimmen, wie häufig Ihre Daten zugegriffen werden muss. Wenn die Daten immer auf einen Schlag abgerufen werden muss, und das meiste davon verwendet dann betrachten alle Schlüsselpaare als serialisierte Wert oder als XML-Wert zu speichern. Wenn Sie auf diese Daten jede Art von komplexen Analyse tun müssen, und Sie müssen die Wertepaare dann sind Spalten in Ordnung, aber sie auf Werte begrenzen, die Sie wissen müssen Sie Ihre Anfragen an auszuführen. Es ist im Allgemeinen einfacher Abfragen zu entwerfen, die eine Spalte für einen Parameter als Zeile verwenden. Sie werden auch mit leichter finden arbeiten die zurückgegebenen Werte, wenn sie alle in einer Reihe, als viele.

Zweitens: Trennen Sie Ihre am häufigsten verwendeten Daten und steckt es in seinem eigenen Tisch und die anderen Daten in einem anderen. 100 Spalten sind viel von der Art und Weise, so empfehle ich, dass Sie Ihre Daten in kleinere Stücke aufgeteilt, die besser handhabbar sein.

Schließlich: Wenn Sie Daten haben, die sich häufig ändern können, dann sollten Sie die Spalte (Schlüssel) in einer Tabelle verwenden, erstellen und dann ihre numerische Schlüsselwert verwenden, gegen die Sie den Schlüsselwert speichern würde. Dies setzt voraus, dass Sie die gleiche Taste mehr als einmal verwendet werden und sollen Ihre Suche beschleunigen, wenn Sie gehen, um Ihre Lookup zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top