perf: replace CAT_OPTIONS correlated subselect with LATERAL JOIN in DXF2 EventQuery#23743
Open
jason-p-pickering wants to merge 2 commits into
Open
perf: replace CAT_OPTIONS correlated subselect with LATERAL JOIN in DXF2 EventQuery#23743jason-p-pickering wants to merge 2 commits into
jason-p-pickering wants to merge 2 commits into
Conversation
…XF2 EventQuery Correlated subselects in the SELECT list execute once per row. Moving to a LATERAL JOIN lets the planner hoist and materialise the aggregation once per COC rather than re-evaluating it for every event row. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
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.



Correlated sub+selects in the SELECT list execute once per row. Moving to a LATERAL JOIN lets the planner hoist and materialise the aggregation once per COC rather than re-evaluating it for every event row. The vast majority of programs do not use an AOC, so most of the time, this is always going to be "default". The subselect was doing redundant work proportional to event count even when the answer was identical every time. LATERAL collapses that.
Testing on a production scale system reveals that the query time can be decreased from 220ms to under 70ms.
Tracker performance tests were inconclusive, but there appeared to be no regression. The difference on the production scale DB was relatively modest, even with millions of events.
Median Response Time (p50) (ms)
95th Percentile Response Time (p95) (ms)
⬇️ = faster (improvement), ⬆️ = slower (regression)