Saltar al contenido

Tipos de datos SQL y SmallInt/TinyInt vs Regular Integer

Agradeceríamos tu ayuda para extender nuestras secciones en referencia a las ciencias informáticas.

Solución:

¿Cuáles son los beneficios de SQL Server de usar tipos de datos adecuados?

Si utiliza el tipo de datos correcto, su base de datos se adaptará mejor a su modelo y es más probable que sea eficiente tanto en términos de espacio como de velocidad. Corre el riesgo de que esta pregunta se cierre como “demasiado amplia” porque puede ser un tema bastante amplio.

Para tocar tus puntos más específicos:

SmallInt/TinyInt frente a entero regular

Los tipos más pequeños ocupan menos espacio, por lo que caben más filas en una página, lo que da como resultado que se ocupe menos espacio tanto en el disco como en la memoria. Por supuesto, si elige un tipo demasiado pequeño, su aplicación fallará. Considere también BIGINT para cuando se necesiten valores superiores a 2.147.483.648 (o inferiores a -2.147.483.647).

La diferencia se multiplica cuando considera los índices: los tipos más grandes terminan en cualquier índice que cubra las columnas también.

Decimal (2) vs flotante

Hay una gran diferencia aquí. DECIMAL (y su sinónimo NUMERIC) son en realidad números enteros escalados que garantizan tener la precisión que especifique. Los números de coma flotante tienen sus usos, pero tenga mucho cuidado con ellos, ya que son solo aproximaciones debido a problemas de redondeo al convertir entre formas binarias y decimales; el ejemplo más común es 0.1+0.2, por lo general no será igual a 0.3. Consulte http://floating-point-gui.de/ entre muchas otras referencias para obtener detalles y ejecute esto para ver el efecto de primera mano:

SELECT CAST(0.1 AS FLOAT        ) + CAST(0.2 AS FLOAT        ), CASE WHEN CAST(0.1 AS FLOAT        ) + CAST(0.2 AS FLOAT        ) = 0.3 THEN 'OK' ELSE 'oops' END
SELECT CAST(0.1 AS DECIMAL(10,2)) + CAST(0.2 AS DECIMAL(10,2)), CASE WHEN CAST(0.1 AS DECIMAL(10,2)) + CAST(0.2 AS DECIMAL(10,2)) = 0.3 THEN 'OK' ELSE 'oops' END

Esencialmente: no usar FLOAT a menos que sepas que es lo que necesitas.

Varchar(100) frente a char(100)

Los tipos de longitud variable son mucho más eficientes en términos de espacio, pero menos eficientes para procesar la CPU. Si utiliza (MAX) es probable que se almacenen fuera de la página, lo que es menos eficiente nuevamente y evita que la compresión surta efecto si la usa en sus tablas. Si usa compresión de fila o página, sus tipos de longitud fija se convierten en longitud variable de todos modos pero mantiene la validación incorporada de longitud que puede ser útil para su modelo.

¿Realmente importará en estos días, con la informática moderna?

Respuesta corta: Sí.
Respuesta larga: ¡Yyyyyyyyeeeeeeeeeeeeesssssssssssss!

Las consideraciones pueden ser un poco diferentes con las CPU modernas: pueden ser mucho más rápidas en relación con el almacenamiento y la transferencia de red de lo que solían ser, por lo que suele ser una buena optimización para ahorrar espacio a expensas del tiempo adicional de la CPU, pero la elección del tipo correcto mucho todavía importa.

Aunque la elección del tipo es más importante para asuntos distintos a la optimización: los tipos correctos modelan mejor sus datos, lo que debería ser su primera prioridad.

La ventaja de utilizar el tipo adecuado es la MEMORIA que utiliza SQL Server para almacenar datos de este o aquel tipo.

  1. TinyInt – 1 byte (puede almacenar valores enteros 0-255)
  2. SmallInt – 2 bytes (puede almacenar valores enteros -32,768 – 32,767)
  3. Int – 4 bytes (puede almacenar valor entero -2^31 – 2^31 -1)
  4. BigInt – 8 bytes (puede almacenar valor entero -2^63 – 2^63 -1)
  5. Varchar(n) – puede almacenar cadenas con menos o igual n simbolos Usará 1 byte para cada símbolo en su string.

    DECLARE @String varchar(100) = 'Hi' -- 2bytes
    DECLARE @String varchar(100) = 'Hello' -- 5bytes
    
  6. char(n) – puede almacenar cadenas con menos o igual n simbolos usará n bytes de memoria sin importar cuántos símbolos le pongas.

    DECLARE @String char(100) = 'Hi' -- 100bytes
    DECLARE @String char(100) = 'Hello' -- 100bytes
    

Puedes leer las diferencias sobre float y decimal tipos de datos aquí

Definitivamente importa incluso en estos días, incluso con la informática moderna. Supongo que va a importar durante mucho tiempo. El uso de tipos de datos adecuados puede ahorrarle MBs. Incluso GBa veces.

Echa un vistazo al artículo de Aaron Bertrand aquí.

Te aclarará las cosas.

Comentarios y calificaciones

Si tienes alguna perplejidad o capacidad de medrar nuestro crónica eres capaz de añadir una crónica y con gusto lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *