PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Bitweise Operationen in Postgres

Use kann Teilindizes verwenden, um die Tatsache zu umgehen, dass "&" kein indexierbarer Operator ist (afaik):

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

Natürlich müssen Sie jedes Mal einen neuen Index hinzufügen, wenn Sie einen neuen Typ hinzufügen. Das ist einer der Gründe dafür, die Daten in eine Assoziationstabelle zu expandieren, die dann richtig indiziert werden kann. Sie können jederzeit Trigger schreiben, um zusätzlich eine Bitmaskentabelle zu verwalten, aber verwenden Sie die Many-to-Many-Tabelle, um die Daten tatsächlich normal zu verwalten, da dies viel übersichtlicher ist.

Wenn Ihre gesamte Bewertung von Skalierung und Leistung lautet:„Ich habe möglicherweise Millionen von Zeilen“, haben Sie nicht genug getan, um mit dieser Art der Optimierung zu beginnen. Erstellen Sie zuerst ein richtig strukturiertes, klares Modell und optimieren Sie es später auf der Grundlage realer Statistiken über seine Leistung.