Added bound option

This commit is contained in:
Andrew Kane
2022-02-13 01:41:06 -08:00
parent ff400ce5f1
commit 7c6694e0ef
3 changed files with 10 additions and 0 deletions

View File

@@ -13,6 +13,7 @@
#endif
int ivfflat_probes;
int ivfflat_bound;
static relopt_kind ivfflat_relopt_kind;
/*
@@ -32,6 +33,10 @@ _PG_init(void)
DefineCustomIntVariable("ivfflat.probes", "Sets the number of probes",
"Valid range is 1..lists.", &ivfflat_probes,
1, 1, IVFFLAT_MAX_LISTS, PGC_USERSET, 0, NULL, NULL, NULL);
DefineCustomIntVariable("ivfflat.bound", "Sets the max results from index (experimental)",
NULL, &ivfflat_bound,
0, 0, INT_MAX, PGC_USERSET, 0, NULL, NULL, NULL);
}
/*

View File

@@ -69,6 +69,7 @@
/* Variables */
extern int ivfflat_probes;
extern int ivfflat_bound;
typedef struct VectorArrayData
{

View File

@@ -111,6 +111,10 @@ GetScanItems(IndexScanDesc scan, Datum value)
*/
BufferAccessStrategy bas = GetAccessStrategy(BAS_BULKREAD);
/* Set the max number of results */
if (ivfflat_bound > 0)
tuplesort_set_bound(so->sortstate, ivfflat_bound);
/* Search closest probes lists */
for (i = 0; i < so->probes; i++)
{