Skip to content

Commit 72a4bca

Browse files
authored
Add index-based lookups and oid caching (#2280)
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
1 parent fee0fa2 commit 72a4bca

File tree

7 files changed

+724
-24
lines changed

7 files changed

+724
-24
lines changed

0 commit comments

Comments
 (0)