mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MWL#90: Subqueries: Inside-out execution for non-semijoin materialized subqueries that are AND-parts of the WHERE
- Remove JOIN::all_tables as it is not useful. - Better wording in comments
This commit is contained in:
@@ -2655,9 +2655,11 @@ bool setup_sj_materialization(JOIN_TAB *tab)
|
||||
then substitute_for_best_equal_field() will change the conditions
|
||||
according to the join order:
|
||||
|
||||
it1
|
||||
it2 it1.col=it2.col
|
||||
ot cond(it1.col)
|
||||
table | attached condition
|
||||
------+--------------------
|
||||
it1 |
|
||||
it2 | it1.col=it2.col
|
||||
ot | cond(it1.col)
|
||||
|
||||
although we've originally had "SELECT it2.col", conditions attached
|
||||
to subsequent outer tables will refer to it1.col, so SJM-Scan will
|
||||
|
@@ -2971,7 +2971,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
|
||||
join->join_tab=stat;
|
||||
join->map2table=stat_ref;
|
||||
join->table= join->all_tables=table_vector;
|
||||
join->table= table_vector;
|
||||
join->const_tables=const_count;
|
||||
join->found_const_table_map=found_const_table_map;
|
||||
|
||||
@@ -4132,7 +4132,7 @@ static void optimize_keyuse(JOIN *join, DYNAMIC_ARRAY *keyuse_array)
|
||||
for (tablenr=0 ; ! (map & 1) ; map>>=1, tablenr++) ;
|
||||
if (map == 1) // Only one table
|
||||
{
|
||||
TABLE *tmp_table=join->all_tables[tablenr];
|
||||
TABLE *tmp_table=join->table[tablenr];
|
||||
keyuse->ref_table_rows= max(tmp_table->file->stats.records, 100);
|
||||
}
|
||||
}
|
||||
|
@@ -1373,8 +1373,11 @@ public:
|
||||
JOIN_TAB *join_tab,**best_ref;
|
||||
JOIN_TAB **map2table; ///< mapping between table indexes and JOIN_TABs
|
||||
JOIN_TAB *join_tab_save; ///< saved join_tab for subquery reexecution
|
||||
/*
|
||||
Base tables participating in the join. After join optimization is done, the
|
||||
tables are stored in the join order.
|
||||
*/
|
||||
TABLE **table;
|
||||
TABLE **all_tables;
|
||||
/**
|
||||
The table which has an index that allows to produce the requried ordering.
|
||||
A special value of 0x1 means that the ordering will be produced by
|
||||
|
Reference in New Issue
Block a user