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 #endif
int ivfflat_probes; int ivfflat_probes;
int ivfflat_bound;
static relopt_kind ivfflat_relopt_kind; static relopt_kind ivfflat_relopt_kind;
/* /*
@@ -32,6 +33,10 @@ _PG_init(void)
DefineCustomIntVariable("ivfflat.probes", "Sets the number of probes", DefineCustomIntVariable("ivfflat.probes", "Sets the number of probes",
"Valid range is 1..lists.", &ivfflat_probes, "Valid range is 1..lists.", &ivfflat_probes,
1, 1, IVFFLAT_MAX_LISTS, PGC_USERSET, 0, NULL, NULL, NULL); 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 */ /* Variables */
extern int ivfflat_probes; extern int ivfflat_probes;
extern int ivfflat_bound;
typedef struct VectorArrayData typedef struct VectorArrayData
{ {

View File

@@ -111,6 +111,10 @@ GetScanItems(IndexScanDesc scan, Datum value)
*/ */
BufferAccessStrategy bas = GetAccessStrategy(BAS_BULKREAD); 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 */ /* Search closest probes lists */
for (i = 0; i < so->probes; i++) for (i = 0; i < so->probes; i++)
{ {