Inside the Storage Engine:Anatomy of a record
Dette er til SQL Server 2005
- optagehoved
- 4 bytes lang
- to bytes med rekordmetadata (posttype)
- to bytes, der peger fremad i posten til NULL bitmap
- delen af posten med fast længde, der indeholder de kolonner, der gemmer datatyper med faste længder (f.eks. bigint, char(10), datetime)
- NULL bitmap
- to bytes til optælling af kolonner i posten
- variabelt antal bytes til at gemme én bit pr. kolonne i posten, uanset om kolonnen er nullbar eller ej (dette er anderledes og enklere end SQL Server 2000, som kun havde én bit pr. nullbar kolonne)
- dette tillader en optimering ved læsning af kolonner, der er NULL
- variabel-længde kolonne offset matrix
- to bytes til antallet af kolonner med variabel længde
- to bytes pr. kolonne med variabel længde, hvilket giver forskydningen til slutningen af kolonneværdiversioneringskoden
- dette er kun i SQL Server 2005 og er en 14-byte struktur, der indeholder et tidsstempel plus en peger ind i versionslagret i tempdb
Så for en char(8000)
- 4 bytes (posthoved)
- 8000 fast længde
- 3 null bitmap
- 2 bytes til at tælle variabel længde
- 14 tidsstempel
Men hvis du havde 40 varchar(200) kolonner
- 4 bytes (posthoved)
- 0 fast længde
- 6 null bitmap
- 2 bytes til at tælle variabel længde
- 202 x 40 =8080
- 14 tidsstempel
I alt =8080 + 4 + 6 + 2 + 14 =8106. WTF? Du får en advarsel, når du oprettede denne tabel
Jeg ville ikke blive for hængt op i det:disse oplysninger har nej praktisk daglig værdi