La respuesta de Daniel se centra en el costo de leer filas individuales. En este contexto: poner NOT NULL
columnas de tamaño fijo primero en su tabla ayuda un poco. Poner las columnas relevantes primero (las que buscas) ayuda un poco. Minimizar el relleno (debido a la alineación de datos) al jugar tetris de alineación con sus columnas puede ayudar un poco. Pero el efecto más importante aún no se ha mencionado, especialmente para tablas grandes.
Obviamente, las columnas adicionales hacen que una fila cubra más espacio en el disco, por lo que caben menos filas en una página de datos (8 kB por defecto). Las filas individuales se extienden por más páginas. El motor de la base de datos generalmente tiene que buscar páginas enteras, no filas individuales . Poco importa si las filas individuales son algo más pequeñas o más grandes, siempre y cuando haya que leer el mismo número de páginas.
Si una consulta obtiene una porción (relativamente) pequeña de una tabla grande, donde las filas se extienden más o menos al azar en toda la tabla, con el apoyo de un índice, esto dará como resultado aproximadamente el mismo número de lecturas de página, con poca consideración a tamaño de fila. Las columnas irrelevantes no lo retrasarán mucho en un caso tan raro.
Normalmente, buscará parches o grupos de filas que se hayan ingresado en secuencia o proximidad y compartirá páginas de datos. Esas filas se extienden debido al desorden, se deben leer más páginas de disco para satisfacer su consulta. Tener que leer más páginas suele ser la razón más importante para que una consulta sea más lenta. Y ese es el factor más importante por el cual las columnas irrelevantes hacen que sus consultas sean más lentas.
Con grandes bases de datos, normalmente no hay suficiente RAM para mantener todo en la memoria caché. Las filas más grandes ocupan más caché, más contención, menos aciertos de caché, más E / S de disco. Y las lecturas de disco suelen ser mucho más caras. Menos con los SSD, pero sigue habiendo una diferencia sustancial. Esto se suma al punto anterior sobre las lecturas de página.
Se puede o no importa si las columnas son irrelevantes TOSTADA-ed. Las columnas relevantes también pueden ser TOAST-ed, devolviendo el mismo efecto.