2012-03-29 8 views
3

Ich habe eine Datenbanktabelle, die Kundendaten mit mehreren Millionen Zeilen enthält, und muss das Feld lastname von NVARCHAR (32) zu NVARCHAR (50) ändern. Das Feld enthält einen Index (nicht gruppiert). Ich muss wissen, ob diese Änderung mit einer ALTER TABLE ALTER COLUMN-Anweisung automatisch den Index neu erstellt.Führt das Erhöhen einer NVARCHAR-Spaltengröße in SQL Server zu einer Indexneuerstellung?

Wenn ja, ich denke das würde ziemlich viel Zeit brauchen. Unser Upgrade-Prozess in der Produktion erfolgt über ein freigegebenes Installationsprogramm, das Skripts ausführt, und wir müssen eine Erwartung darüber haben, wie lange das Upgrade dauern wird. Wir haben sowohl in SQL 2005 als auch in 2008 umfangreiche DBs in Produktion, daher muss ich die Antwort für beide kennen, wenn sie anders ist.

Ich weiß, dass eine Vergrößerung der Spalten die Daten in einem Feld mit variabler Länge wie NVARCHAR nicht ändern sollte und selbst bei großen Datenmengen in einer Situation, in der kein Index beteiligt ist, sehr schnell sein sollte. Was mir nicht klar ist, ist, ob ein Index dies viel langsamer verursacht.

Ich lese die Dokumentation unter dem folgenden Link, aber es zeigt nur an, dass Sie die Änderung mit einem vorhandenen Index vornehmen können, und gibt nicht an, wie sich die Ausführungszeit der Anweisung ALTER TABLE auswirkt ob hat der Index danach wieder aufgebaut werden, oder automatisch erfolgt, usw.

http://msdn.microsoft.com/en-us/library/ms190273.aspx

die Frage an den unten stehenden Link wirklich fast das gleiche ist hier frage ich, aber es gibt keine befriedigende Antwort auf diese andere Post, also dachte ich, ich würde einen neuen Post versuchen.

SQL Server 2005 Index rebuild when increasing the size of a varchar field

Bitte lassen Sie mich wissen, wenn Sie Erfahrung mit diesem gehabt haben. Wenn ich ein Testsystem mit einer umfangreichen Datenbank einrichten kann, in der ich experimentieren kann, werde ich die Ergebnisse veröffentlichen.

Danke!

+0

Ich glaube nicht, dass der Index neu erstellt werden muss, wenn alles, was Sie getan haben, ist, die Größe zu erhöhen. Wenn Sie die Größe nicht erhöhen * und * NULL 's in der Tabelle haben * und * die Definition in' NOT NULL' * ändern * und * einen Standardwert hinzufügen, der größer als die alte Größe ist, wird sich keine Zeile ändern Keine Daten im Index ändern sich. Aber du kannst das sicher testen * ohne * eine "ansehnliche DB" zu erstellen ... –

+0

Ok, cool. Keines der Dinge, die du erwähnt hast, trifft auf meine Situation zu; Keine NOT NULL-Integritätsbedingungen oder DEFAULT-Werte, die für die Spalten definiert sind, die ich ändern muss. Ich denke, was ich tun werde, um sicher zu prüfen, ob die Ausführungszeit der Anweisung beeinflusst wird, ist die Erstellung von zwei Tabellen mit jeweils einer VARCHAR (50) -Spalte, die mit einem einfachen Skript gefüllt werden kann. Ich kann einen Index auf eine Tabelle und keinen Index auf den anderen setzen und die Zeit, die es dauert, um die Spalten auf VARCHAR (100) für jede Tabelle zu ändern, wenn sie identische Daten haben und der einzige Unterschied ist der Index. – Jim

+0

Die Abfrage von sys.dm_db_index_physical_stats vor und nach der Änderung wird möglicherweise ebenfalls angezeigt, wenn signifikante Änderungen vorgenommen wurden. –

Antwort

3

Nein - In SQL Server werden Indizes nie automatisch neu erstellt, auch wenn Sie eine Spaltengröße wie die genannte nvarchar-Spalte ändern. Indizes werden automatisch gepflegt, aber nicht wiederhergestellt. Statistiken/internes Histogramm der Daten können automatisch aktualisiert werden, wenn die automatische Update-Statistik der Datenbankoption gesetzt ist.