From 22fcc557e73320e59243d9ae7dec863c6e283ece Mon Sep 17 00:00:00 2001 From: nkey Date: Mon, 30 Dec 2024 16:37:12 +0100 Subject: [PATCH v15 12/12] Updates index insert and value computation logic to optimize auxiliary index handling. * Skip index value computation for auxiliary indices since they are not needed * Set indexUnchanged=false for auxiliary indices to avoid unnecessary checks --- src/backend/catalog/index.c | 11 +++++++++++ src/backend/executor/execIndexing.c | 11 +++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 19201d26211..ff8a8a2731e 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -2932,6 +2932,17 @@ FormIndexDatum(IndexInfo *indexInfo, ListCell *indexpr_item; int i; + /* Auxiliary index does not need any values to be computed */ + if (unlikely(indexInfo->ii_Auxiliary)) + { + for (i = 0; i < indexInfo->ii_NumIndexAttrs; i++) + { + values[i] = PointerGetDatum(NULL); + isnull[i] = true; + } + return; + } + if (indexInfo->ii_Expressions != NIL && indexInfo->ii_ExpressionsState == NIL) { diff --git a/src/backend/executor/execIndexing.c b/src/backend/executor/execIndexing.c index f2a74b76465..eef1b35e68c 100644 --- a/src/backend/executor/execIndexing.c +++ b/src/backend/executor/execIndexing.c @@ -441,11 +441,14 @@ ExecInsertIndexTuples(ResultRelInfo *resultRelInfo, * There's definitely going to be an index_insert() call for this * index. If we're being called as part of an UPDATE statement, * consider if the 'indexUnchanged' = true hint should be passed. + * + * In case of auxiliary index always pass false as optimisation. */ - indexUnchanged = update && index_unchanged_by_update(resultRelInfo, - estate, - indexInfo, - indexRelation); + indexUnchanged = update && likely(!indexInfo->ii_Auxiliary) && + index_unchanged_by_update(resultRelInfo, + estate, + indexInfo, + indexRelation); satisfiesConstraint = index_insert(indexRelation, /* index relation */ -- 2.43.0