Dentro del motor de almacenamiento:anatomía de un registro
Esto es para SQL Server 2005
- encabezado de registro
- 4 bytes de longitud
- dos bytes de metadatos de registro (tipo de registro)
- dos bytes apuntando hacia adelante en el registro al mapa de bits NULL
- parte de longitud fija del registro, que contiene las columnas que almacenan tipos de datos que tienen longitudes fijas (por ejemplo, bigint, char(10), datetime)
- mapa de bits NULO
- dos bytes para el conteo de columnas en el registro
- número variable de bytes para almacenar un bit por columna en el registro, independientemente de si la columna es anulable o no (esto es diferente y más simple que SQL Server 2000 que tenía un bit por columna anulable solamente)
- esto permite una optimización al leer columnas que son NULL
- matriz de desplazamiento de columna de longitud variable
- dos bytes para el recuento de columnas de longitud variable
- dos bytes por columna de longitud variable, dando el desplazamiento al final de la etiqueta de versión de valor de columna
- esto es solo en SQL Server 2005 y es una estructura de 14 bytes que contiene una marca de tiempo más un puntero al almacén de versiones en tempdb
Entonces, por un carácter (8000)
- 4 bytes (encabezado de registro)
- 8000 longitud fija
- 3 mapas de bits nulos
- 2 bytes para contar de longitud variable
- 14 marcas de tiempo
Sin embargo, si tuviera 40 columnas varchar(200)
- 4 bytes (encabezado de registro)
- 0 longitud fija
- 6 mapas de bits nulos
- 2 bytes para contar de longitud variable
- 202x40 =8080
- 14 marcas de tiempo
Total =8080 + 4 + 6 + 2 + 14 =8106. WTF? Recibes una advertencia cuando creas esta tabla
No me obsesionaría demasiado:esta información no valor práctico en el día a día