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:
@ -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++)
|
||||
{
|
||||
|
Reference in New Issue
Block a user