Repository navigation
Conversation
|
Note AI-generated summary. SummaryA hop whose two ends both carry labels now runs as one edge scan. The scan walks one end's by-label edge index and checks the other end's labels per edge, so the label filter and its rows are gone. Codegen is unchanged; MATCH (a)-->(s:Species) WHERE a:Pathway RETURN count(*)
-%0, %1, %2, %3 = db.scan_out_edges_by_label_tgt(["Species"])
-%4 = db.get_node_label_set(%0)
-%5 = db.check_label_constraint(%4, ["Pathway"])
-%6 = db.filter(%5, {%0})
-%7 = db.count(%6) rows
+%0, %1, %2, %3 = db.scan_out_edges_by_label_src_tgt(["Pathway"], ["Species"])
+%4 = db.count(%0) rowsThe pass picks which end's index to walk from the edges each index holds under its labels. The count is the size of the walk, read from the existing Two storage counts that The branch has a binary search for the datapart owning a node ( Evidence
Reactome, median of 7 runs of the server's own time, in-memory servers. Speedup is the Tests, all passing; Before the pass chose the index side, 4 Merge DangerDoor: two-way No dump, wire or Blast Radius: planner-wide Every MATCH with labels on both ends of a hop now takes the new scan, and may emit rows in a different order. Two |
92faa8a to
af0a83b
Compare
Implement edge scans with both ends bound to a label.