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

PostgreSQL - Abfrage des GIN-Index des HSTORE-Werts

Ihr anfänglicher Versuch ist korrekt, aber Sie müssen (teilweise) Btree-Indizes und Bitmap-Index-Scans verwenden, um sich darauf zu verlassen:

create index on product(((ext->'size')::int)) where ((ext->'size') is not null);

Dasselbe gilt für Masse, und wenn der Planer es nicht sofort versteht, fügen Sie zwei where-Klauseln hinzu, dh where ext->'size' is not null und das gleiche für die Masse.

Wenn es ein Muster gibt (was wahrscheinlich ist, da die meisten Produkte mit einer Größe auch eine Masse haben), erstellen Sie möglicherweise einen mehrspaltigen Index, der die beiden kombiniert - ein Beutel, der andere desc.

Der Gin-Index, wie Sie ihn geschrieben haben, zusammen mit der begleitenden Abfrage (mit einem Syntaxfehler) wird im Grunde dasselbe tun, aber ungeordnet; es wird langsamer sein.