Wenn VARCHAR(MAX)
Sie SQL Server verwenden, sagen Sie im Grunde, dass "Speichern Sie die Werte in diesem Feld so, wie Sie es am besten sehen". SQL Server wählt dann aus, ob Werte als reguläres VARCHAR
oder als LOB (großes Objekt) gespeichert werden sollen . Wenn die gespeicherten Werte weniger als 8.000 Byte betragen, behandelt SQL Server Werte im Allgemeinen als regulären VARCHAR
Typ.
Wenn die gespeicherten Werte sind zu groß , dann wird die Spalte der Seite , um LOB - Seiten zu vergießen off erlaubt, genau so , wie sie für andere LOB - Typen tun ( text
, ntext
und image
) - wenn dies geschieht , dann weitere Seite liest erforderlich ist , um die Daten zu lesen , gespeichert in die zusätzlichen Seiten (dh es gibt eine Leistung penatly), dies geschieht jedoch nur, wenn die gespeicherten Werte zu groß sind .
Unter SQL Server 2008 oder höher können Daten auch bei Datentypen mit fester Länge (z. B. VARCHAR(3,000)
) auf zusätzliche Seiten überlaufen. Diese Seiten werden jedoch als Zeilenüberlauf-Datenseiten bezeichnet und geringfügig anders behandelt.
Kurzversion: Aus Speichersicht gibt es für einige keinen Nachteil, VARCHAR(MAX)
Over VARCHAR(N)
zu verwenden N
.
(Beachten Sie, dass dies auch für die anderen Feldtypen mit variabler Länge gilt NVARCHAR
und VARBINARY
)
Zu Ihrer Information - Sie können keine Indizes für VARCHAR(MAX)
Spalten erstellen