PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Operazioni bit a bit in Postgres

L'uso può utilizzare indici parziali per aggirare il fatto che "&" non è un operatore indicizzabile (afaik):

CREATE INDEX vendors_typeA ON vendors(id) WHERE (type & 2) > 0;
CREATE INDEX vendors_typeB ON vendors(id) WHERE (type & 4) > 0;

Ovviamente, dovrai aggiungere un nuovo indice ogni volta che aggiungi un nuovo tipo. Che è uno dei motivi per espandere i dati in una tabella di associazione che può quindi essere indicizzata correttamente. Puoi sempre scrivere trigger per mantenere una tabella bitmask in aggiunta, ma usa la tabella molti-a-molti per mantenere normalmente i dati, poiché sarà molto più chiaro.

Se la tua intera valutazione del ridimensionamento e delle prestazioni dice "Potrei avere milioni di righe", non hai fatto abbastanza per iniziare questo tipo di ottimizzazione. Crea prima un modello chiaro adeguatamente strutturato, poi ottimizzalo sulla base di statistiche reali sulle sue prestazioni.