1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-09 22:41:56 +03:00

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.
This commit is contained in:
Heikki Linnakangas
2014-01-29 18:23:17 +02:00
parent e20c70cb0f
commit 25b1dafab6
3 changed files with 39 additions and 7 deletions

View File

@ -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++)
{