Necesito actualizar una base de datos de SQL Server que tenga aproximadamente 18 GB de tamaño para cambiar un número significativo de TEXT
columnas NVARCHAR(MAX)
.
El problema que tengo es que después de ejecutar todos los alter table
comandos, la base de datos termina teniendo un tamaño de casi 26 GB. Entiendo que a partir de aquí el uso NVARCHAR(MAX)
permitirá que el DB crezca más lentamente, pero ¿hay alguna forma de evitar esta hinchazón?
sql-server
Aidan Lawless
fuente
fuente
Respuestas:
Espero que esta publicación te sea de ayuda.
http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx
Hechos clave:
Cuando modifica la columna de TEXT / NTEXT a NVARCHAR (MAX), la forma en que se almacenan los datos no cambia, solo actualiza los metadatos de la tabla. La estructura de datos solo cambia la próxima vez que se cambia el valor. Esto se puede hacer inmediatamente ejecutando algo como esto:
Si utiliza la configuración de opción de tabla predeterminada para NVARCHAR (MAX), los datos en su tabla serán más grandes.
- Tendrá que mirar la configuración de opciones de la mesa y el entorno antes de cambiar la configuración según sus necesidades.
El tamaño de su tabla eventualmente se reducirá si sigue su declaración de alterar tabla con la instrucción de actualización de tabla.
En resumen, si ejecuta la declaración de actualización, obligando a cambiar el almacenamiento de la estructura de datos, el tamaño de su base de datos será menor, como se esperaba.
EDITAR : Como ha mencionado TEXTO y no NTEXT, su ganancia en el espacio sería menos obvia de lo que podría pensar. NTEXT ocupa el doble de espacio que TEXT, pero al mismo tiempo, debe esperar que NVARCHAR (MAX) ocupe aproximadamente la mitad del espacio que NTEXT. Según mis cálculos, vería pocos cambios con respecto al tamaño original de su base de datos.
fuente
Puede ser un descuido en su pregunta, pero está diciendo TEXTO a NVARCHAR (máx.) Y no NTEXT a NVARCHAR (máx.). Si esto es lo que realmente está haciendo, está cambiando de ANSI a UNICODE y no debería sorprenderse de que tome más espacio (caracteres de un solo byte versus caracteres de varios bytes).
fuente
TEXT
campo existente ; ir a Unicode ocupa exactamente el doble del espacio de almacenamiento de ANSI.