Commit 72a4bca
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.c1 parent fee0fa2 commit 72a4bca
File tree
7 files changed
+724
-24
lines changed- regress
- expected
- sql
- src/backend
- catalog
- executor
- utils/adt
7 files changed
+724
-24
lines changed
0 commit comments