2010-07-07 13 views
8

Supongamos que quiero guardar el recuento de las filas de la cuadrícula de datos que pueden ser máx. 24 porque cada fila es de 1 hora.SQL: ¿Es eficiente usar tinyint en lugar de Integer si mi valor máximo es 255?

Para guardar el índice de fila en la base de datos, un campo minúsculo sería totalmente suficiente. Pero de vuelta en mi mente recuerdo ligeramente que las bases de datos están optimizadas para enteros?

¿Vale la pena utilizar tinyint?

Respuesta

9

Con una mesa estrecha, la base de datos se ajuste más registros en una sola página IO, y por lo tanto requerirá menos disco duro lee.

La regla de oro es usar siempre el tipo de datos que requiera el menor tamaño de almacenamiento.

+3

+1 Sí, el menor tamaño de almacenamiento * suponiendo * que el tipo de datos puede almacenar los datos que necesita. Es decir. no use tinyint si a veces necesita valores enteros mayores que 255. Parece obvio, pero debe decirse. :-) –

2

tinyint

less space is good.

+2

menos palabras también? : P – msfanboy

3

Generalmente, cuanto menos espacio, mejor, ya que cuantas más filas puedan caber en una Página de E/S signle 8k en el disco (o en la memoria), se requieren menos E/S para buscar y/o recuperar datos ... Esto es especialmente importante para columnas usadas en índices. Sin embargo, si su máquina es, por ejemplo, una máquina de 32 bits y ejecuta un sistema operativo de 32 bits, entonces el trozo de memoria más pequeño que se puede direccionar independientemente es de 32 bits, así que si esta es la única columna en su tabla de 32 bits, entonces no importa porque cada fila completa de datos debe comenzar y terminar en un límite de 32 bits, por lo que cada fila debe ser un múltiplo de 32 bits de ancho.

es decir, si su mesa era

(tinyint Cola, ColB Int, ColC DateTime) MyTable A continuación, cada fila se toman serán desperdiciados 16 bytes (128 bits) y 24 bits.

Por otro lado, si tiene 4 columnas que podrían ser tinyInts, use eso porque el servidor SQL pondrá cuatro de ellas en una ubicación de almacenamiento de 32 bits en el disco (sin importar en qué orden las declare) .

Los mismos principios se aplican al servidor SQL de 64 bits que se ejecuta en OS/CPUbB de 64 bits

Cuestiones relacionadas