Uno de nuestros clientes usa para algunas columnas el tipo DECIMAL(18,0)
de datos en su base de datos SQL Server 2008R2. Debido a que las columnas crecen bastante lentamente, recientemente propuso cambiar el tipo de datos DECIMAL(5,0)
para recuperar algo de almacenamiento.
Según la biblioteca MSDN , el espacio de almacenamiento del DECIMAL(5,0)
tipo de datos es, al igual que el DECIMAL(9,0)
tipo de datos, 5 bytes. INT
es 1 byte más pequeño, pero puede almacenar todo en el rango de -2 ^ 31 a 2 ^ 31 en lugar del -99,999 a 99,999 que DECIMAL(5,0)
puede almacenar. Incluso el más grande DECIMAL
que cabe en 5 bytes ( DECIMAL(9,0)
) puede almacenar solo enteros en el rango de -999,999,999 a 999,999,999 (que es menos de la mitad de las INT
ofertas de rango en 4 bytes).
Puedo pensar en dos "beneficios" de usar DECIMAL
más de INT
:
- La capacidad de agregar escala después, sin usar más espacio de almacenamiento
- La capacidad de escalar la precisión hasta 38 dígitos, sin alterar el tipo de datos
pero estos no son beneficios reales en mi opinión:
- Agregar escala a enteros solo tiene sentido en muy pocos casos (en la mayoría de los casos en que la escala marca la diferencia, también se podría agregar de antemano)
- SQL Server ve cada combinación de precisión / escala como un tipo de datos diferente, por lo que el tipo de datos no se queda solo al aumentar la precisión o la escala.
Esto me hace preguntarme: ¿cuál es el beneficio adicional de un DECIMAL(5,0)
tipo de datos para enteros?
decimal(x,0)
y un tipo entero se muestra en la división aritmética. Si divide un int por un int, obtiene un int. Si divide un decimal (x, 0) por un int, obtendrá un decimal (x + 6,6).