Add index-based lookups and oid caching#2280
Merged
jrgemignani merged 1 commit intoapache:Dev_Multiple_Labelsfrom Dec 20, 2025
Merged
Add index-based lookups and oid caching#2280jrgemignani merged 1 commit intoapache:Dev_Multiple_Labelsfrom
jrgemignani merged 1 commit intoapache:Dev_Multiple_Labelsfrom
Conversation
NOTE: This work was done with an AI coding tool and a human. Replace sequential table scans with index-based lookups for single-row vertex operations in the unified vertex table architecture. This improves performance from O(n) to O(log n) for vertex existence checks, retrievals, updates, and deletions. Changes: * vertex_exists() in cypher_utils.c: Use systable_beginscan() with the primary key index instead of table_beginscan() * get_vertex() in agtype.c: Use index scan for startNode()/endNode() vertex retrieval * process_delete_list() in cypher_delete.c: Use index scan for vertex lookups; fix scan key comparison from F_GRAPHIDEQ to F_INT8EQ since unified vertex table stores id as bigint, not graphid * process_update_list() in cypher_set.c: Use index scan for SET/REMOVE operations Add cache-first lookup optimization: * _label_name_from_table_oid() in ag_label.c: Check label relation cache before falling back to syscache lookup, reducing catalog overhead for repeated label name lookups All changes use RelationGetIndexList() with rd_pkindex to obtain the primary key index OID for systable_beginscan(). Added regression tests. modified: regress/expected/unified_vertex_table.out modified: regress/sql/unified_vertex_table.sql modified: src/backend/catalog/ag_label.c modified: src/backend/executor/cypher_delete.c modified: src/backend/executor/cypher_set.c modified: src/backend/executor/cypher_utils.c modified: src/backend/utils/adt/agtype.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
NOTE: This work was done with an AI coding tool and a human.
Replace sequential table scans with index-based lookups for single-row vertex operations in the unified vertex table architecture. This improves performance from O(n) to O(log n) for vertex existence checks, retrievals, updates, and deletions.
Changes:
Add cache-first lookup optimization:
All changes use RelationGetIndexList() with rd_pkindex to obtain the primary key index OID for systable_beginscan().
Added regression tests.
modified: regress/expected/unified_vertex_table.out
modified: regress/sql/unified_vertex_table.sql
modified: src/backend/catalog/ag_label.c
modified: src/backend/executor/cypher_delete.c
modified: src/backend/executor/cypher_set.c
modified: src/backend/executor/cypher_utils.c
modified: src/backend/utils/adt/agtype.c