Ich habe Tabelle, die von sehr grundlegenden Informationen hält. Nur ein Titel und ein paar Datumsfelder. Es gibt ein Feld namens " Kommentare", das varchar (4000) ist. Meistens lassen wir es leer, aber manchmal geben wir hier eine große Datenmenge ein. Ist das ein wirklich schlechtes Design? Oder ist das nur ein bisschen ineffizient?
Ich würde davon ausgehen, dass das Erstellen einer separaten Tabelle für diese Spalte besser wäre.
Hinweis: Dies ist SQL Server 2008
SPARSE
und ohneSPARSE
...Antworten:
Um eine vorhersehbarere Leistung zu erzielen (und um zu vermeiden, dass die Zeilen pro Seite stark variieren), würde ich diese Daten gerne in einer verwandten Tabelle speichern - insbesondere, wenn sie nur zu einem geringen Prozentsatz gefüllt sind und insbesondere, wenn sie nur in abgerufen werden einige der Abfragen. Die Zeilen, in denen dieser Wert angegeben ist
NULL
, tragen zwar zum Platzbedarf bei, dies ist jedoch minimal. Wichtiger wird sein, wie eine Seite möglicherweise nur zwei Zeilen und die nächste 500 Zeilen aufnehmen kann - dies kann sich sehr auf die Statistik auswirken, und Sie sollten dies besser aufteilen, damit es separat gespeichert wird und sich nicht auf alle Vorgänge auswirkt die Kerntabelle.quelle
Es nimmt nur wenig Platz in Anspruch, wenn es nicht verwendet wird
Der Overhead ist minimal und die Optimierung wird verfrüht sein.
Bis Sie wissen, dass Sie ein Problem haben, bewahren Sie es einfach in einer Tabelle auf. Sie unterbrechen KISS, indem Sie äußere Verknüpfungen einführen und einen zusätzlichen Aufwand beim Abfragen der Daten verursachen.
Siehe /programming/3793022/how-to-come-to-limits-of-8060-bytes-per-row-and-8000-per-varchar-nvarchar-valu/3793265#3793265 für mehr
quelle
Ich denke, eine separate Tabelle ist besser, um die Seitendichte zu verbessern und die Fragmentierung zu reduzieren, besonders wenn Sie dieses Feld nicht immer füllen.
All diese leeren Seiten und Zeiger führen zu einer schlechten Leistung. Normalisieren Sie dieses Feld, wenn Sie können.
quelle
Diese Frage sieht sehr ähnlich aus: Beeinflussen zusätzliche leere Spalten die SQL-Tabellengröße erheblich?
Es sieht so aus, als ob die Antwort lautet: Ja, es nimmt zwar Platz in Anspruch, aber es gibt einen Komprimierungsalgorithmus für Spalten mit vielen Nullwerten.
In Bezug auf das Design denke ich, dass eine externe Tabelle, die mit dieser verknüpft ist, ein saubereres Design wäre. Eine Spalte mit häufigen Nullwerten macht es den Benutzern der Datenbank schwerer, da sie versehentlich einen Nullwert verwenden könnten, wenn sie nicht vorsichtig sind. Daher müsste der Code, der die Datenbank verwendet, eine Fehlerprüfung enthalten, und von dort aus wird er nur hässlich.
quelle
SPARSE
"Spalten mit vielen Nullwerten" definiert sind.Sie werden in Ordnung sein - es ist bereits eine Varchar-Spalte, daher wird nur dann Speicherplatz verwendet, wenn sie Daten enthält. Wenn Sie viele nullfähige Spalten mit fester Größe wie int hatten, kann es zu Problemen bei der Speicherplatznutzung kommen.
Soweit ich es in einen anderen Tisch stelle, würde ich mich nicht darum kümmern. Sie können sich auch die Verwendung von varchar (max) und die Optionen zum Ein- und Ausreihen ansehen. Wieder wahrscheinlich verfrüht.
quelle