Ich habe Tabelle, die von sehr grundlegenden Informationen enthä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 wird hier eine große Datenmenge eingegeben. Ist das ein wirklich schlechtes Design? Oder ist das nur etwas ineffizient?
Ich würde annehmen, dass das Erstellen einer separaten Tabelle für diese Spalte besser wäre.
hinweis: Dies ist SQL Server 2008
Um eine besser vorhersehbare Leistung zu erzielen (und um eine große Variation der Zeilen pro Seite zu vermeiden), würde ich diese Daten in einer verwandten Tabelle speichern - insbesondere, wenn sie nur zu einem kleinen Prozentsatz der Zeit ausgefüllt sind und insbesondere, wenn sie nur abgerufen werden einige der Fragen. Die Zeilen, in denen dieser Wert NULL
ist, tragen zwar zum Speicherplatzaufwand bei, dies ist jedoch minimal. Wichtiger ist, wie eine Seite möglicherweise nur in zwei Zeilen und die nächste Seite in 500 Zeilen passt - dies kann sich wirklich auf die Statistik auswirken, und Sie sollten dies besser aufteilen, damit es separat gespeichert wird und nicht alle Ihre Vorgänge beeinflusst die Kerntabelle.
Es benötigt nur minimalen Platz, wenn es nicht verwendet wird
Der Overhead ist minimal und die Optimierung ist verfrüht.
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 bei der Abfrage der Daten hinzufügen.
Ich denke, eine separate Tabelle wäre besser, um die Seitendichte zu verbessern und die Fragmentierung zu verringern, insbesondere wenn Sie dieses Feld nicht immer ausfüllen.
All diese leeren Seiten und Zeiger führen zu einer schlechten Leistung. Normalisieren Sie dieses Feld, wenn Sie können.
Diese Frage sieht sehr ähnlich aus: Beeinflussen zusätzliche leere Spalten die Größe der SQL-Tabelle erheblich?
Es sieht so aus, als ob die Antwort lautet: Ja, es nimmt Platz ein, aber es gibt einen Komprimierungsalgorithmus für Spalten mit vielen Nullwerten.
In Bezug auf das Design denke ich, dass eine damit verbundene externe Tabelle ein saubereres Design wäre. Eine Spalte mit häufigen Nullwerten erschwert es den Benutzern der Datenbank, 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 wird von dort aus nur hässlich.
Es wird Ihnen gut gehen - 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, können Probleme mit der Speicherplatznutzung auftreten.
Soweit ich es auf 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 für In/Out-Zeilen ansehen. Auch dies ist wahrscheinlich verfrüht.