Mentre è già documentato che NULL occupa solo 1 bit nell'intestazione tuple postgresql per la riga, quanto spazio occupa NULL nell'INDICE di una colonna nullable (non la tupla, ma l'indice)? È lo stesso 1 bit all'interno dell'indice come nella tupla, o è la dimensione del tipo di dati della colonna completa (EG: intero = 4 byte)?I NULL occupano spazio negli indici postgresql?
Il contesto per la domanda è che ho una tabella di PostgreSQL che ha 3 colonne che fanno riferimento (EG: foo_id, bar_id e baz_id) e per ogni riga, solo una di queste colonne avrebbe un valore (le altre 2 colonne sarebbe essere NULL). Tuttavia, ho bisogno che tutte e 3 le colonne siano indicizzate. Supponendo che ogni colonna sia un intero (4 byte in postgresql), ogni riga dovrebbe occupare 4 byte (per la colonna non nulla) più 2 bit (per le 2 colonne null). Tuttavia, se dovessi aggiungere indici per tutte e 3 le colonne, la memorizzazione per i 3 indici sarebbe di 12 byte (se l'indice occupa i 4 byte completi per un valore nullo) o gli stessi 4 byte + 2 bit come nel tupla stessa.
Bene, 1 modo in cui è possibile rispondere parzialmente a se stessi: non è possibile rappresentare (solo) lo stesso numero di byte richiesto dal tipo di dati. Nel tuo esempio int, ogni combinazione possibile di 4 byte rappresenta un valore int valido, quindi non c'è modo che un null possa essere codificato in quegli stessi quattro byte. –