mirror of
https://github.com/MariaDB/server.git
synced 2025-10-26 16:38:11 +01:00
This is done by no longer merging inner table dep with outer nested_join ones. This expands the search space of outer joins and introduces suboptimal join order choices already existing in inner joins (e.g. MDEV-36331, MDEV-37346) to outer joins, caused by heuristic pruning. To mitigate this issue, we add a switch that turns on heuristic pruning always (existing behaviour), and make is so that when the switch is off (default) joins with limited number of tables or limited search space* do not perform heuristic pruning. This improves join order optimization for these joins, where otherwise heuristic pruning may remove good joins - see added test cases in the test main.greedy_optimizer. *: about the same as 10 tables with default search depth (7) when optimizer_search_depth=0. If we completely disable heuristic pruning, or use the upper bound 10!, the test main.greedy_optimizer will grind to almost hanging for optimizer_search_depth=0 when more than 20 tables are involved. If we only compare the number of tables with 10, then it will prune when search space is low due to a low search depth when we can afford not to prune. |
||
|---|---|---|
| .. | ||
| alter.result | ||
| autoinc.result | ||
| binlog.result | ||
| commit_id.result | ||
| create.result | ||
| cte,32bit.rdiff | ||
| cte.result | ||
| data.result | ||
| debug.result | ||
| delete.result | ||
| delete_history,32bit.rdiff | ||
| delete_history.result | ||
| derived.result | ||
| foreign.result | ||
| insert.result | ||
| insert2.result | ||
| misc.result | ||
| not_embedded.result | ||
| old_timestamp.result | ||
| online.result | ||
| optimized.result | ||
| partition,heap.rdiff | ||
| partition.result | ||
| replace.result | ||
| rpl.result | ||
| rpl_mix.result | ||
| rpl_row.result | ||
| rpl_stmt.result | ||
| select.result | ||
| select2,trx_id.rdiff | ||
| select2.result | ||
| simple.result | ||
| sysvars.result | ||
| trx_id.result | ||
| update,trx_id.rdiff | ||
| update-big.result | ||
| update.result | ||
| view.result | ||