diff options
author | Sergei Petrunia <sergey@mariadb.com> | 2022-06-18 19:52:14 +0300 |
---|---|---|
committer | Sergei Petrunia <sergey@mariadb.com> | 2022-06-18 19:52:14 +0300 |
commit | 95fe7010113fe2ce5b4c11c8db96b61eb49da295 (patch) | |
tree | 264589f40e52952ae042064c9bfa07fcd8c16fef | |
parent | 4a888d5b265b1e0e1e8b2a20c4b71220cdd825ea (diff) | |
download | mariadb-git-bb-10.10-spetrunia.tar.gz |
Cleanups for: 0762dd928 Improve pruning in greedy_search by sorting tables during searchbb-10.10-spetrunia
-rw-r--r-- | sql/sql_select.cc | 18 | ||||
-rw-r--r-- | sql/sql_select.h | 8 |
2 files changed, 17 insertions, 9 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index b9d606eac1f..96c53b360a7 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -5441,13 +5441,19 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list, } } + /* Set JOIN_TAB::embedded_dependent for tables inside semi-joins */ { for (JOIN_TAB *s= stat ; s < stat_end ; s++) { - TABLE_LIST *tl= s->table->pos_in_table_list; - if (tl->embedding && tl->embedding->sj_subq_pred) + TABLE_LIST *emb= s->table->pos_in_table_list->embedding; + while (emb) { - s->embedded_dependent= tl->embedding->original_subq_pred_used_tables; + if (emb->sj_subq_pred) + { + s->embedded_dependent= emb->original_subq_pred_used_tables; + break; + } + emb= emb->embedding; } } } @@ -8366,7 +8372,7 @@ best_access_path(JOIN *join, */ if (s->key_start_dependent) key_dependent= s->key_dependent; - /* Add dependencey for sub queries */ + /* Add dependency from semi-join subquery */ key_dependent|= s->embedded_dependent; } /* Check that s->key_dependent contains all used_tables found in s->keyuse */ @@ -9953,8 +9959,8 @@ check_if_edge_table(POSITION *pos, struct SORT_POSITION { - JOIN_TAB **join_tab; - POSITION *position; + JOIN_TAB **join_tab; /* Position of the JOIN_TAB in join->best_ref array */ + POSITION *position; /* Pointer to how we read the table */ }; diff --git a/sql/sql_select.h b/sql/sql_select.h index 46a359c746f..a6e4c752f9b 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -359,9 +359,11 @@ typedef struct st_join_table { table_map dependent,key_dependent; /* - This is set for embedded sub queries. It contains the table map of - the outer expression, like 'A' in the following expression: - WHERE A in (SELECT ....) + This is non-zero for tables in semi-join nests. It contains bits + of tables that the subquery depends on. + For example, for + WHERE t1.col in (SELECT t10.col FROM t10 WHERE t10.col<t2.col) + t10->embedded_dependent= {t1, t2} */ table_map embedded_dependent; |