Ik weet niet of Pg een GiST-index en gewone b-tree-indexen kan combineren met een bitmap-indexscan, maar ik vermoed van niet. Mogelijk krijgt u het beste resultaat zonder een user_id
. toe te voegen kolom naar uw GiST-index (en daardoor groter en langzamer makend voor andere zoekopdrachten die geen gebruik maken van user_id
).
Als experiment kun je:
CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);
wat waarschijnlijk zal resulteren in een grote index, maar die zoekopdracht zou kunnen stimuleren - als het werkt. Houd er rekening mee dat het onderhouden van een dergelijke index INSERT
aanzienlijk zal vertragen en UPDATE
s. Als je de oude ix_coords
. laat vallen uw zoekopdrachten gebruiken ix_coords_and_user_id
zelfs als ze niet filteren op user_id
, maar het zal langzamer zijn dan ix_coords
. Als u beide bewaart, wordt de INSERT
en UPDATE
vertraging nog erger.
Zie btree-gist
(Verouderd door bewerking naar vraag die de vraag volledig verandert; toen de gebruiker een index met meerdere kolommen had, is deze nu opgesplitst in twee afzonderlijke ):
Het lijkt erop dat u niet filtert of sorteert op user_id
, alleen create_date
. Pg zal (kan niet?) alleen de tweede term van een index met meerdere kolommen gebruiken, zoals (user_id, create_date)
, het heeft ook het eerste item nodig.
Als je create_date
wilt indexeren , maak er een aparte index voor aan. Als je de (user_id, create_date)
. gebruikt en nodig hebt index en gebruik over het algemeen niet alleen user_id
alleen, kijk of je de kolomvolgorde kunt omkeren. Maak als alternatief twee onafhankelijke indexen, (user_id)
en (create_date)
. Als beide kolommen nodig zijn, kan Pg de twee onafhankelijke indexen combineren met behulp van een bitmapindexscan.