fix(trees): replace child/synonym LEFT JOINs with scalar subqueries#8243
Draft
grantfitzsimmons wants to merge 1 commit into
Draft
fix(trees): replace child/synonym LEFT JOINs with scalar subqueries#8243grantfitzsimmons wants to merge 1 commit into
grantfitzsimmons wants to merge 1 commit into
Conversation
Contributor
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
Fixes #8242
Note
The scalar query logic was suggested by DeepSeek V4 Pro. There may be more performant ways of accomplishing this. Feedback is welcome.
The tree view endpoint constructed queries with three independent
LEFT OUTER JOINs on the same tree table, one for counting children, one for looking up the accepted parent, and one for aggregating synonyms. When expanding a node with many children, the result set would balloon aschildren * accepted_matches * synonyms, overwhelming the database and causing a 504 gateway timeout.This happened because each join added rows multiplicatively before
GROUP BYcollapsed them withDISTINCTaggregates likecount(DISTINCT ...)andGROUP_CONCAT(DISTINCT ...). For a storage tree node like "Rack 001" at SAIAB, which has hundreds of direct child storage locations, the query would run for 40+ seconds and continue executing even after the HTTP connection was severed. Page refreshes would spawn additional instances, all consuming database resources.Testing instructions
Compare against the same database on both
v7and onissue-8242.child_countandsynonymsstill display correctly.