Das Innere der Speicher-Engine:Anatomie eines Datensatzes
Dies gilt für SQL Server 2005
- Kopfzeile des Datensatzes
- 4 Byte lang
- zwei Byte Datensatz-Metadaten (Datensatztyp)
- zwei Bytes, die im Datensatz auf die NULL-Bitmap zeigen
- Teil des Datensatzes mit fester Länge, der die Spalten enthält, in denen Datentypen mit fester Länge gespeichert sind (z. B. bigint, char(10), datetime)
- NULL-Bitmap
- zwei Bytes für die Anzahl der Spalten im Datensatz
- variable Anzahl von Bytes, um ein Bit pro Spalte im Datensatz zu speichern, unabhängig davon, ob die Spalte nullable ist oder nicht (dies ist anders und einfacher als SQL Server 2000, der nur ein Bit pro nullable-Spalte hatte)
- Dies ermöglicht eine Optimierung beim Lesen von Spalten, die NULL sind
- Spalten-Offset-Array variabler Länge
- zwei Bytes für die Anzahl der Spalten mit variabler Länge
- zwei Bytes pro Spalte mit variabler Länge, die den Versatz zum Ende des Spaltenwertversionierungs-Tags angeben
- Dies ist nur in SQL Server 2005 und ist eine 14-Byte-Struktur, die einen Zeitstempel und einen Zeiger auf den Versionsspeicher in tempdb enthält
Also für ein Zeichen (8000)
- 4 Bytes (Record Header)
- 8000 feste Länge
- 3 Null-Bitmap
- 2 Bytes zum Zählen variabler Länge
- 14 Zeitstempel
Wenn Sie jedoch 40 varchar(200)-Spalten hätten
- 4 Bytes (Record Header)
- 0 feste Länge
- 6 Null-Bitmap
- 2 Bytes zum Zählen variabler Länge
- 202 x 40 =8080
- 14 Zeitstempel
Gesamt =8080 + 4 + 6 + 2 + 14 =8106. WTF? Sie erhalten eine Warnung, wenn Sie diese Tabelle erstellt haben
Ich würde mich nicht zu sehr darauf einlassen:Diese Information hat nein praktischer Alltagswert