La risposta di Daniel si concentra sul costo della lettura di singole righe. In questo contesto: mettere le NOT NULL
colonne a dimensione fissa al primo posto nella tabella aiuta un po '. Mettere prima le colonne pertinenti (quelle per cui si esegue una query) aiuta un po '. Ridurre al minimo il riempimento (a causa dell'allineamento dei dati) giocando l'allineamento tetris con le colonne può aiutare un po '. Ma l'effetto più importante non è stato ancora menzionato, specialmente per i grandi tavoli.
Le colonne aggiuntive fanno ovviamente sì che una riga copra più spazio su disco, in modo che meno righe si adattino a una pagina di dati (8 KB per impostazione predefinita). Le singole righe sono distribuite su più pagine. Il motore di database deve generalmente recuperare intere pagine, non singole righe . Poco importa se le singole righe siano in qualche modo più piccole o più grandi, purché si debba leggere lo stesso numero di pagine.
Se una query recupera una porzione (relativamente) piccola di una tabella grande, in cui le righe sono distribuite più o meno casualmente sull'intera tabella, supportate da un indice, ciò comporterà all'incirca lo stesso numero di letture di pagine, con poca considerazione alle dimensioni della riga. Le colonne irrilevanti non ti rallenteranno molto in un caso (raro).
In genere, recupererai patch o cluster di righe immesse in sequenza o in prossimità e condividerai pagine di dati. Quelle righe sono distribuite a causa del disordine, più pagine del disco devono essere lette per soddisfare la tua richiesta. Dover leggere più pagine è in genere il motivo più importante per una query più lenta. E questo è il fattore più importante per cui colonne irrilevanti rendono più lente le tue query.
Con grandi database, in genere non c'è abbastanza RAM per mantenere tutto nella memoria cache. Le righe più grandi occupano più cache, più contese, meno hit nella cache, più I / O su disco. E le letture del disco sono in genere molto più costose. Meno con gli SSD, ma rimane una differenza sostanziale. Ciò si aggiunge al punto precedente sulle letture della pagina.
Può essere o meno importante se le colonne non pertinenti sono TOAST-ed. Anche le colonne pertinenti possono essere TOAST, riportando gran parte dello stesso effetto.