Improved performance for duplicates

This commit is contained in:
Andrew Kane
2023-08-10 08:52:45 -07:00
parent 6f15dd266c
commit 309fa94c05
2 changed files with 9 additions and 7 deletions

View File

@@ -290,14 +290,17 @@ InsertTuple(Relation index, Datum *values, HnswElement element, HnswBuildState *
/* Insert element in graph */
*dup = HnswInsertElement(element, entryPoint, NULL, procinfo, collation, m, efConstruction, false);
/* Update neighbors */
for (int lc = element->level; lc >= 0; lc--)
if (*dup == NULL)
{
int lm = HnswGetLayerM(m, lc);
HnswNeighborArray *neighbors = &element->neighbors[lc];
/* Update neighbors */
for (int lc = element->level; lc >= 0; lc--)
{
int lm = HnswGetLayerM(m, lc);
HnswNeighborArray *neighbors = &element->neighbors[lc];
for (int i = 0; i < neighbors->length; i++)
HnswUpdateConnection(element, &neighbors->items[i], lm, lc, NULL, NULL, procinfo, collation);
for (int i = 0; i < neighbors->length; i++)
HnswUpdateConnection(element, &neighbors->items[i], lm, lc, NULL, NULL, procinfo, collation);
}
}
/* Update entry point if needed */

View File

@@ -942,7 +942,6 @@ HnswInsertElement(HnswElement element, HnswElement entryPoint, Relation index, F
}
/* Look for duplicates */
/* This must come last, since duplicate updates can fail */
if (level >= 0 && !vacuuming)
{
dup = HnswFindDuplicate(element);