-
Notifications
You must be signed in to change notification settings - Fork 2.3k
feat: cost-based join order enumeration #24456
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
Dandandan
wants to merge
18
commits into
apache:main
Choose a base branch
from
Dandandan:perf/join-order-enumeration
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
a329cf3
feat: cost-based join order enumeration in JoinSelection
Dandandan aa652b5
fix: require a margin before replacing the planner's join order
Dandandan de80dd7
fix: estimate a filter one conjunct at a time, and estimate IN lists
Dandandan 1040be5
refactor: trim join enumeration comments, drop the greedy fallback
Dandandan 1a3ab0c
fix: keep the enumeration module private and drop unused async from t…
Dandandan 47f3a39
fix: don't re-enumerate inside a subtree whose order was kept
Dandandan 074cd43
refactor: make join enumeration its own rule
Dandandan 53da44d
docs: add join_enumeration to the optimizer rule reference
Dandandan f37ebb5
feat: enumerate sort merge join orders too
Dandandan 636b455
feat: enumerate cross and nested loop join orders too
Dandandan 4c34486
Cost partitioning in join enumeration, raise the collect threshold
Dandandan cf466ca
Fix two costs the search got wrong for sort merge and keyless joins
Dandandan bae4492
Merge upstream/main into perf/join-order-enumeration
Dandandan f4a3d75
Merge remote-tracking branch 'upstream/main' into perf/join-order-enu…
Dandandan 3496d02
Trim the comments this PR added
Dandandan 29c224d
Narrow each rebuilt sort merge join instead of once above the subtree
Dandandan 8126ad3
Make the cost model a trait others can plug into
Dandandan a61d01b
Move the join graph into its own module
Dandandan File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this set of settings is exactly why I am hesitant to put something too complicated into the datafusion core -- the join ordering algorithms can get so out of hand complicated I think we need to find a way to keep the core (relatively) simple and leave API hooks to support the more complicated cases
I have more suggestions on how to do this below
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah - my goal would be to mostly bring this down as well (i.e. remove or accept the regression).