Wewnątrz silnika pamięci masowej:anatomia rekordu
To jest dla SQL Server 2005
- nagłówek rekordu
- 4 bajty długości
- dwa bajty metadanych rekordu (typ rekordu)
- dwa bajty wskazujące w rekordzie do przodu na bitmapę NULL
- Część rekordu o stałej długości, zawierająca kolumny przechowujące typy danych o stałej długości (np. bigint, char(10), datetime)
- Bitmapa NULL
- dwa bajty na liczbę kolumn w rekordzie
- zmienna liczba bajtów do przechowywania jednego bitu na kolumnę w rekordzie, niezależnie od tego, czy kolumna dopuszcza wartość null, czy nie (jest to inne i prostsze niż SQL Server 2000, który miał tylko jeden bit na kolumnę dopuszczającą wartość null)
- pozwala to na optymalizację podczas czytania kolumn, które są NULL
- tablica przesunięcia kolumny o zmiennej długości
- dwa bajty na liczbę kolumn o zmiennej długości
- dwa bajty na kolumnę o zmiennej długości, co daje przesunięcie do końca tagu valueversioning kolumny
- jest to tylko w SQL Server 2005 i jest 14-bajtową strukturą zawierającą znacznik czasu oraz wskaźnik do magazynu wersji w tempdb
Tak więc za jeden znak (8000)
- 4 bajty (nagłówek rekordu)
- 8000 stałej długości
- 3 bitmapy zerowe
- 2 bajty do zliczenia zmiennej długości
- 14 znacznik czasu
Jeśli jednak masz 40 varchar(200) kolumn
- 4 bajty (nagłówek rekordu)
- 0 stałej długości
- 6 pustych bitmap
- 2 bajty do zliczenia zmiennej długości
- 202 x 40 =8080
- 14 znacznik czasu
Razem =8080 + 4 + 6 + 2 + 14 =8106. WTF? Otrzymasz ostrzeżenie podczas tworzenia tej tabeli
Nie za bardzo bym się tym rozłączył:ta informacja nie praktyczna wartość z dnia na dzień