Speed up mesh child terms query #123
Merged
+23
−1
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.
This PR resolves #122. The slow part has been identified to be querying for mesh child terms over more than one hop while only using
isa
a relationship type. One query for one of the tests runs for 340 seconds in this case.For some (still unclear) reason, querying using
-[:isa|partof*1..]->
is about 170x faster 🤯 than using just using-[:isa*1..]->
, regardless if the result is empty or not when using the below query structure:Below is a table detailing the rough timing in seconds for the above query using different values for
mesh id
andrel expr
:<rel expr>
isa
isa*1..
isa/partof
isa/partof*1..
partof/isa
partof/isa*1..
The changes in this PR makes use of this and changes the relation in the query from
:isa*1..
to:partof|isa*1..
with some post filtering that takes a negligible amount of time.