mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Fixed LP bug #953649.
Do not call, directly or indirectly, SQL_SELECT::test_quick_select() for derived materialized tables / views when optimizing joins referring to these tables / views to get cost estimates of materialization. The current code does not create B-tree indexes for materialized derived tables / views. So now it's not possible to get any estimates for ranges conditions over the results of the materialization. The function mysql_derived_create() must take into account the fact that array of the KEY structures specifying the keys over a derived table / view may be moved after the optimization phase if the derived table / view is materialized.
This commit is contained in:
@@ -3513,12 +3513,16 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
|
||||
Perform range analysis if there are keys it could use (1).
|
||||
Don't do range analysis if we're on the inner side of an outer join (2).
|
||||
Do range analysis if we're on the inner side of a semi-join (3).
|
||||
Don't do range analysis for materialized subqueries (4).
|
||||
Don't do range analysis for materialized derived tables (5)
|
||||
*/
|
||||
if (!s->const_keys.is_clear_all() && // (1)
|
||||
(!s->table->pos_in_table_list->embedding || // (2)
|
||||
(s->table->pos_in_table_list->embedding && // (3)
|
||||
s->table->pos_in_table_list->embedding->sj_on_expr)) && // (3)
|
||||
!s->table->is_filled_at_execution())
|
||||
if (!s->const_keys.is_clear_all() && // (1)
|
||||
(!s->table->pos_in_table_list->embedding || // (2)
|
||||
(s->table->pos_in_table_list->embedding && // (3)
|
||||
s->table->pos_in_table_list->embedding->sj_on_expr)) && // (3)
|
||||
!s->table->is_filled_at_execution() && // (4)
|
||||
!(s->table->pos_in_table_list->derived && // (5)
|
||||
s->table->pos_in_table_list->is_materialized_derived())) // (5)
|
||||
{
|
||||
ha_rows records;
|
||||
SQL_SELECT *select;
|
||||
|
||||
Reference in New Issue
Block a user