perf: eliminate program table join in single event queries [DHIS2-20891]#23047
Merged
enricocolasante merged 2 commits intomasterfrom Feb 26, 2026
Merged
perf: eliminate program table join in single event queries [DHIS2-20891]#23047enricocolasante merged 2 commits intomasterfrom
enricocolasante merged 2 commits intomasterfrom
Conversation
7c4b14d to
fe59d02
Compare
fe59d02 to
db9e230
Compare
teleivo
approved these changes
Feb 25, 2026
|
|
||
| return caseStatement.toString(); | ||
| sqlParameters.addValue("skipSyncDataElements", dataElementUids); | ||
| return "(SELECT jsonb_object_agg(key, value)" |
Contributor
There was a problem hiding this comment.
use a text block or single line
muilpp
approved these changes
Feb 25, 2026
|
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.



Eliminate
programandprogramstagetable joins from single event queries when the respective parameter is known. The columns (uid, code, name, attributeValues) are already available from the Java objects loaded during request validation, so we populate them directly in the row mapper instead of joining the tables.Similar approach as #23044 for tracker events.
The
programparameter is mandatory for/api/tracker/events, so the program join is always eliminated and, in the case of single events, a program of typeWITHOUT_REGISTRATIONonly has oneprogramstage, hence also the program stage join can be eliminated.Before:
After (with program known):
Performance
Database
No regressions and no visible improvement