Beschleunigung der Verwendung von varchar in SQL Server 2008

9

In den alten Tagen war die Verwendung von varcharover charein großes Nein Nein, da das varcharauf einer anderen Seite als der Rest der Zeile gespeichert wurde. Ist dies bei SQL Server 2008 noch heute der Fall? Werde ich einen Speicher- / Leistungsgewinn sehen, wenn ich 1-3 varchar(5)Spalten in char(5)Spalten in einer Tabelle mit ändere ?

a) sagen wir 2.000.000 Zeilen b) wenn eine der varcharSpalten Teil von Indizes / Primärschlüsseln ist

Carlo V. Dango
quelle
2
Mögliches Duplikat der Frage Wie wirken sich zu lange Felder (varchar / nvarchar) auf die Leistung und die Festplattennutzung aus? (MSSQL Server 2008) . Wenn Sie der Meinung sind, dass es sich nicht um ein Duplikat handelt, finden Sie dort definitiv auch einige Antworten.
Marian

Antworten:

8

Sie verwechseln Text / varchar (max) (LOB-Typen) mit varchar (n) / char (n)

Andernfalls ist dies ein schlechtes Design und viel verschwendeter Speicherplatz, wenn Sie char (1000) und nicht varchar (1000) verwenden und die durchschnittliche Datenlänge beispielsweise 42 beträgt.

gbn
quelle
Unter DB2 und einigen anderen DB-Engines wurden char und varchar unterschiedlich gespeichert und einige der Ratschläge für DB2 auf SQL Server übertragen.
Andrew Bickerton
@ Andrew Bickerton: noch ein Mythos ...
gbn
Kannst du mich in die Richtung weisen, in die dieser Mythos entlarvt wurde? (Ich bin damit einverstanden, dass der Rat nicht für SQL Server gilt)
Andrew Bickerton
Ich beziehe mich auch auf eine der Originalversionen von DB2 (wahrscheinlich war dies in den letzten 10 Jahren nicht so), ähnlich wie bei SQL 2000, dass PKs nicht gruppiert werden sollten, da immer noch Leistungsprobleme bestehen nicht mehr wahr
Andrew Bickerton
@ Andrew Bickerton: Schauen Sie sich einfach die Festplattenstrukturen von SQL Server an (mehrere SO-Antworten von mir). Stackoverflow.com/search?q=user%3A27535+anatomy . Entschuldigung für die späte Antwort
gbn
3

Es ist schwierig, Sie über bestimmte Leistungssteigerungen oder Treffer zu informieren, ohne mehr über Ihr Schema zu wissen. Im Allgemeinen möchten Sie jedoch den Datentyp so definieren, dass er mit Ihren Daten übereinstimmt. Wenn Sie eine feste Breite benötigen (z. B. wissen Sie, dass Sie immer fünf Zeichen haben), sollten Sie char (5) verwenden. Wenn Sie eine variable Datenmenge haben, sollten Sie varchar (5) verwenden.

Je mehr Daten für SQL auf eine Seite passen, desto besser ist Ihre Leistung.

SQLRockstar
quelle
3

Soweit ich weiß, hat SQL Server nie varchar- oder nvarchar-Datentypen außerhalb der Zeile gespeichert. Text und NText sind unterschiedlich. Es gibt ein paar zusätzliche Bits, die für eine Spalte mit variabler Breite gespeichert werden, aber das war es auch schon.

mrdenny
quelle