Estoy usando el sp_spaceused
procedimiento almacenado incorporado antes y después de realizar una operación en nuestro software para ver qué tablas tienen inserciones de fila y cómo cambia el tamaño de cada tabla.
Lo que estoy viendo es que de todas las tablas que tienen filas escritas, solo un puñado muestra que la tabla ha aumentado de lado. Los otros que muestran filas que se agregaron no muestran cambios en el tamaño de este procedimiento almacenado.
El único caso en que esto no es cierto es en la primera transacción después de realizar un truncamiento en todas las tablas. Entonces, para mí, parece que en lugar de almacenar datos duplicados, SQL Server muestra que se insertan filas, pero solo debe almacenar punteros a filas idénticas anteriores.
Puede alguien confirmar esto por favor?
fuente
Respuestas:
No, SQL Server no detecta filas duplicadas
SQL Server está llenando páginas vacías o parcialmente vacías dentro de las páginas asignadas.
Entonces, si tengo una fila muy estrecha (por ejemplo, 2 columnas), puedo agregar unos cientos de filas más en la misma página sin aumentar el espacio utilizado.
Demostración rápida y sucia (sin filas duplicadas, pero puede jugar con esto si lo desea)
fuente
Depende de la versión de SQL Server y las opciones de compresión de datos:
Entonces, para la compresión de prefijos y diccionarios (compresión de páginas), SQL Server usa punteros para almacenar (duplicados total o parcialmente) valores duplicados (no filas duplicadas) dentro de la misma columna o dentro de diff. columnas
Resultados:
fuente