mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +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:
@ -1205,6 +1205,20 @@ public:
|
||||
passing 1st non-const table to filesort(). NULL means no such table exists.
|
||||
*/
|
||||
TABLE *sort_by_table;
|
||||
|
||||
/*
|
||||
If true, there is ORDER BY x LIMIT n clause and for certain join orders, it
|
||||
is possible to short-cut the join execution, i.e. stop it as soon as n
|
||||
output rows were produced. See join_limit_shortcut_is_applicable().
|
||||
*/
|
||||
bool limit_shortcut_applicable;
|
||||
|
||||
/*
|
||||
Used during join optimization: if true, we're building a join order that
|
||||
will short-cut join execution as soon as #LIMIT rows are produced.
|
||||
*/
|
||||
bool limit_optimization_mode;
|
||||
|
||||
/*
|
||||
Number of tables in the join.
|
||||
(In MySQL, it is named 'tables' and is also the number of elements in
|
||||
|
Reference in New Issue
Block a user