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. |
||
|---|---|---|
| .. | ||
| r | ||
| t | ||
| common.inc | ||
| common.opt | ||
| common_finish.inc | ||
| disabled.def | ||
| engines.combinations | ||
| engines.inc | ||
| innodb.combinations | ||
| innodb.inc | ||
| key_type.combinations | ||
| key_type.inc | ||
| sys_time.inc | ||
| wait_system_clock.inc | ||