Citando la documentación :
El tipo entero es la opción común, ya que ofrece el mejor equilibrio entre rango, tamaño de almacenamiento y rendimiento. El tipo smallint generalmente solo se usa si el espacio en disco es escaso. El tipo bigint solo debe usarse si el rango del tipo entero es insuficiente, porque este último es definitivamente más rápido.
Tengo entendido que diferentes tipos de datos requieren diferentes asignaciones de memoria. Así que asumo que menos espacio significa que se requieren menos búsquedas para obtener datos (teóricamente, al menos). No estoy seguro acerca de las lecturas, escrituras y cálculos.
¿Qué tan significativos son los cambios en los tipos de datos con respecto a:
El tamaño de un smallint es de 2 bytes, un integer tiene 4 bytes y un bigint 8. Por lo tanto, los requisitos básicos de espacio son obvios.
Sin embargo, hay que considerar la alineación: un integer debe comenzar en un desplazamiento divisible por 4 y un bigint en un desplazamiento divisible por 8. Por lo tanto, a menos que organice las columnas de la tabla con cuidado, puede perder todo el espacio ganado al elegir un tipo de datos más pequeño. para vaciar los bytes de relleno .
El impacto en la E/S de lectura o escritura de la tabla es proporcional al ahorro de espacio, por lo que normalmente es marginal. Para un índice, el impacto puede ser mayor, porque las claves de índice cortas significan una mayor distribución, menos páginas internas y una menor profundidad del árbol del índice.
El hardware realiza los cálculos que utilizan varios números enteros, por lo que todos son muy rápidos. Las diferencias deben ser medibles, pero no extremas.
En general, casi nunca vale la pena el esfuerzo de elegir un tipo de datos entero más pequeño. El dolor que tiene que sufrir si (por ejemplo) su secuencia de teclas principal se queda sin valores integer supera con creces cualquier beneficio de ahorrar espacio.