Ich muss eine SQL Server-Datenbank mit einer Größe von ca. 18 GB aktualisieren, um eine signifikante Anzahl von TEXT
Spalten in zu ändern NVARCHAR(MAX)
.
Das Problem, das ich habe, ist, dass alter table
die Datenbank nach dem Ausführen aller Befehle fast 26 GB groß ist. Ich verstehe, dass die Verwendung von hier aus NVARCHAR(MAX)
die DB langsamer wachsen lässt, aber gibt es eine Möglichkeit für mich, dieses Aufblähen zu verhindern?
sql-server
Aidan Lawless
quelle
quelle
Antworten:
Ich gehe davon aus, dass dieser Beitrag Ihnen weiterhelfen wird.
http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx
Wichtige Fakten:
Wenn Sie die Spalte von TEXT / NTEXT in NVARCHAR (MAX) ändern, wird die Art und Weise, wie die Daten gespeichert werden, nicht geändert. Es werden nur die Tabellenmetadaten aktualisiert. Die Datenstruktur wird erst beim nächsten Ändern des Werts geändert. Dies kann sofort erfolgen, indem Sie Folgendes ausführen:
Wenn Sie die Standardeinstellung für Tabellenoptionen für NVARCHAR (MAX) verwenden, sind die Daten in Ihrer Tabelle größer.
- Sie müssen sich die Einstellungen und die Umgebung Ihrer Tabellenoptionen ansehen, bevor Sie die Einstellung an Ihre Bedürfnisse anpassen können.
Ihre Tabellengröße wird schließlich kleiner, wenn Sie Ihrer Anweisung alter table die Anweisung update table folgen.
Kurz gesagt, wenn Sie die Update-Anweisung ausführen und die Änderung des Speichers der Datenstruktur erzwingen, wird Ihre Datenbankgröße erwartungsgemäß kleiner.
EDIT : Wie Sie TEXT und nicht NTEXT erwähnt haben, wäre Ihr Platzgewinn weniger offensichtlich, als Sie vielleicht denken. NTEXT benötigt doppelt so viel Speicherplatz wie TEXT. Gleichzeitig sollten Sie davon ausgehen, dass NVARCHAR (MAX) etwa die Hälfte des Speicherplatzes einnimmt wie NTEXT. Nach meiner Berechnung würden Sie kaum Änderungen gegenüber Ihrer ursprünglichen Datenbankgröße feststellen.
quelle
Könnte ein Versehen in Ihrer Frage sein, aber Sie sagen TEXT zu NVARCHAR (max) und nicht NTEXT zu NVARCHAR (max). Wenn Sie dies wirklich tun, wechseln Sie von ANSI zu UNICODE, und Sie sollten sich nicht wundern, dass mehr Platz benötigt wird (Einzelbytezeichen gegenüber Mehrbytezeichen).
quelle
TEXT
Felds zunehmen. Das Wechseln zu Unicode benötigt genau das Doppelte des Speicherplatzes von ANSI.