diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2014-01-29 18:23:17 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2014-01-29 18:26:40 +0200 |
commit | 25b1dafab63f465a65c63b26834dc18857f0fa0c (patch) | |
tree | b442a77b6e24d9c6ad176fa9d70497c597d5ce41 /src/backend/access/gin/ginget.c | |
parent | e20c70cb0fa74d5bffa080e21a99b44bf0768667 (diff) | |
download | postgresql-25b1dafab63f465a65c63b26834dc18857f0fa0c.tar.gz postgresql-25b1dafab63f465a65c63b26834dc18857f0fa0c.zip |
Further optimize multi-key GIN searches.
If we're skipping past a certain TID, avoid decoding posting list segments
that only contain smaller TIDs.
Extracted from Alexander Korotkov's fast scan patch, heavily modified.
Diffstat (limited to 'src/backend/access/gin/ginget.c')
-rw-r--r-- | src/backend/access/gin/ginget.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c index 40abb3971e2..49e47c6859c 100644 --- a/src/backend/access/gin/ginget.c +++ b/src/backend/access/gin/ginget.c @@ -400,6 +400,7 @@ restartScanEntry: BlockNumber rootPostingTree = GinGetPostingTree(itup); GinBtreeStack *stack; Page page; + ItemPointerData minItem; /* * We should unlock entry page before touching posting tree to @@ -426,7 +427,8 @@ restartScanEntry: /* * Load the first page into memory. */ - entry->list = GinDataLeafPageGetItems(page, &entry->nlist); + ItemPointerSetMin(&minItem); + entry->list = GinDataLeafPageGetItems(page, &entry->nlist, minItem); entry->predictNumberResult = stack->predictNumber * entry->nlist; @@ -558,7 +560,7 @@ entryLoadMoreItems(GinState *ginstate, GinScanEntry entry, ItemPointerData advan continue; } - entry->list = GinDataLeafPageGetItems(page, &entry->nlist); + entry->list = GinDataLeafPageGetItems(page, &entry->nlist, advancePast); for (i = 0; i < entry->nlist; i++) { |