mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-34720: Poor plan choice for large JOIN with ORDER BY and small LIMIT
(Variant 2b: call greedy_search() twice, correct handling for limited search_depth) Modify the join optimizer to specifically try to produce join orders that can short-cut their execution for ORDER BY..LIMIT clause. The optimization is controlled by @@optimizer_join_limit_pref_ratio. Default value 0 means don't construct short-cutting join orders. Other value means construct short-cutting join order, and prefer it only if it promises speedup of more than #value times. In Optimizer Trace, look for these names: * join_limit_shortcut_is_applicable * join_limit_shortcut_plan_search * join_limit_shortcut_choice
This commit is contained in:
@ -724,6 +724,15 @@ The following specify which files/extra groups are read (specified before remain
|
||||
keys. This variable will be deleted in MariaDB 11.0 as it
|
||||
is not needed with the new 11.0 optimizer.
|
||||
Use 'ALL' to set all combinations.
|
||||
--optimizer-join-limit-pref-ratio=#
|
||||
For queries with JOIN and ORDER BY LIMIT : make the
|
||||
optimizer consider a join order that allows to short-cut
|
||||
execution after producing #LIMIT matches if that promises
|
||||
N times speedup. (A conservative setting here would be is
|
||||
a high value, like 100 so the short-cutting plan is used
|
||||
if it promises a speedup of 100x or more). Short-cutting
|
||||
plans are inherently risky so the default is 0 which
|
||||
means do not consider this optimization
|
||||
--optimizer-max-sel-arg-weight=#
|
||||
The maximum weight of the SEL_ARG graph. Set to 0 for no
|
||||
limit
|
||||
@ -1697,6 +1706,7 @@ old-mode UTF8_IS_UTF8MB3
|
||||
old-passwords FALSE
|
||||
old-style-user-limits FALSE
|
||||
optimizer-adjust-secondary-key-costs
|
||||
optimizer-join-limit-pref-ratio 0
|
||||
optimizer-max-sel-arg-weight 32000
|
||||
optimizer-max-sel-args 16000
|
||||
optimizer-prune-level 1
|
||||
|
Reference in New Issue
Block a user