MWL#90: subquery optimizations

- Remove redundant changes againist 5.3-main
This commit is contained in:
Sergey Petrunya 2011-02-18 14:17:28 +03:00
parent 9482a2cf09
commit f93b0bbebb
7 changed files with 16 additions and 48 deletions

View File

@ -3587,7 +3587,7 @@ subselect_hash_sj_engine::get_strategy_using_schema()
bitmap_set_bit(&partial_match_key_parts, i); bitmap_set_bit(&partial_match_key_parts, i);
++count_partial_match_columns; ++count_partial_match_columns;
} }
}; }
} }
/* If no column contains NULLs use regular hash index lookups. */ /* If no column contains NULLs use regular hash index lookups. */
@ -3787,7 +3787,8 @@ bitmap_init_memroot(MY_BITMAP *map, uint n_bits, MEM_ROOT *mem_root)
reexecution. reexecution.
@param tmp_columns the items that produce the data for the temp table @param tmp_columns the items that produce the data for the temp table
@param subquery_id subquery's identifier (for temptable name) @param subquery_id subquery's identifier (to make "<subquery%d>" name for
EXPLAIN)
@details @details
- Create a temporary table to store the result of the IN subquery. The - Create a temporary table to store the result of the IN subquery. The
@ -3998,7 +3999,6 @@ subselect_hash_sj_engine::make_unique_engine()
tab->table= tmp_table; tab->table= tmp_table;
tab->ref.tmp_table_index_lookup_init(thd, tmp_key, it, FALSE); tab->ref.tmp_table_index_lookup_init(thd, tmp_key, it, FALSE);
DBUG_RETURN(new subselect_uniquesubquery_engine(thd, tab, item, DBUG_RETURN(new subselect_uniquesubquery_engine(thd, tab, item,
semi_join_conds)); semi_join_conds));
} }

View File

@ -7788,6 +7788,7 @@ bool setup_tables(THD *thd, Name_resolution_context *context,
} }
DBUG_ASSERT(item == table_list->jtbm_subselect); DBUG_ASSERT(item == table_list->jtbm_subselect);
table_list->jtbm_subselect->setup_engine(FALSE); table_list->jtbm_subselect->setup_engine(FALSE);
//psergey-merge: ^ todo: error checking!
} }
} }

View File

@ -3033,7 +3033,8 @@ bool select_dumpvar::send_eof()
} }
bool select_materialize_with_stats:: bool
select_materialize_with_stats::
create_result_table(THD *thd_arg, List<Item> *column_types, create_result_table(THD *thd_arg, List<Item> *column_types,
bool is_union_distinct, ulonglong options, bool is_union_distinct, ulonglong options,
const char *table_alias, bool bit_fields_as_long) const char *table_alias, bool bit_fields_as_long)

View File

@ -1061,7 +1061,6 @@ int JOIN_CACHE::realloc_buffer()
*/ */
int JOIN_CACHE::init() int JOIN_CACHE::init()
//psergey-merge:wtf is this here: for (tab= start_tab; tab != join_tab; tab= next_linear_tab(join, tab, TRUE))
{ {
DBUG_ENTER("JOIN_CACHE::init"); DBUG_ENTER("JOIN_CACHE::init");
@ -3260,23 +3259,7 @@ uint JOIN_CACHE_HASHED::get_next_key(uchar ** key)
int JOIN_TAB_SCAN::open() int JOIN_TAB_SCAN::open()
{ {
//psergey-merge: todo: check the below:
//JOIN_TAB *bound= join_tab-cache->tables;
#if 0
JOIN_TAB *bound= cache->start_tab;
// psergey-todo-merge: can we really iterate backwards?
// Q: is there really a need to iterate backwards?
for (JOIN_TAB *tab= join_tab-1; tab != bound && !tab->cache; tab--)
{
tab->status= tab->table->status;
tab->table->status= 0;
}
#endif
save_or_restore_used_tabs(join_tab, FALSE); save_or_restore_used_tabs(join_tab, FALSE);
is_first_record= TRUE; is_first_record= TRUE;
return join_init_read_record(join_tab); return join_init_read_record(join_tab);
} }
@ -3381,12 +3364,7 @@ void save_or_restore_used_tabs(JOIN_TAB *join_tab, bool save)
void JOIN_TAB_SCAN::close() void JOIN_TAB_SCAN::close()
{ {
#if 0 save_or_restore_used_tabs(join_tab, TRUE);
JOIN_TAB *bound= join_tab - cache->tables;
for (JOIN_TAB *tab= join_tab-1; tab != bound && !tab->cache; tab--)
tab->table->status= tab->status;
#endif
save_or_restore_used_tabs(join_tab, TRUE);
} }
@ -3786,15 +3764,6 @@ int JOIN_TAB_SCAN_MRR::open()
/* Dynamic range access is never used with BKA */ /* Dynamic range access is never used with BKA */
DBUG_ASSERT(join_tab->use_quick != 2); DBUG_ASSERT(join_tab->use_quick != 2);
/*
psergey-merge: done?
JOIN_TAB *bound= join_tab - cache->tables;
for (JOIN_TAB *tab= join_tab-1; tab != bound && !tab->cache; tab--)
{
tab->status= tab->table->status;
tab->table->status= 0;
}
*/
save_or_restore_used_tabs(join_tab, FALSE); save_or_restore_used_tabs(join_tab, FALSE);
init_mrr_buff(); init_mrr_buff();

View File

@ -2931,7 +2931,6 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
no_rows_const_tables |= table->map; no_rows_const_tables |= table->map;
} }
} }
stat_vector[i]=0; stat_vector[i]=0;
join->outer_join=outer_join; join->outer_join=outer_join;
@ -7057,7 +7056,6 @@ inline void add_cond_and_fix(Item **e1, Item *e2)
} }
/** /**
Add to join_tab->select_cond[i] "table.field IS NOT NULL" conditions Add to join_tab->select_cond[i] "table.field IS NOT NULL" conditions
we've inferred from ref/eq_ref access performed. we've inferred from ref/eq_ref access performed.

View File

@ -162,7 +162,7 @@ typedef enum_nested_loop_state
RETURN RETURN
0 - OK 0 - OK
-1 - Record not found -1 - Record not found
Other - Error Other - A fatal error
*/ */
typedef int (*Read_record_func)(struct st_join_table *tab); typedef int (*Read_record_func)(struct st_join_table *tab);
@ -446,7 +446,6 @@ typedef struct st_join_table {
} }
void calc_used_field_length(bool max_fl); void calc_used_field_length(bool max_fl);
ulong get_used_fieldlength() ulong get_used_fieldlength()
{ {
if (!used_fieldlength) if (!used_fieldlength)
calc_used_field_length(FALSE); calc_used_field_length(FALSE);

View File

@ -966,7 +966,7 @@ struct st_table {
key_read= 1; key_read= 1;
file->extra(HA_EXTRA_KEYREAD); file->extra(HA_EXTRA_KEYREAD);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
/* /*
If TRUE, the table is filled at execution phase (and so, the optimizer If TRUE, the table is filled at execution phase (and so, the optimizer
should not do things like range analysis or constant table detection on should not do things like range analysis or constant table detection on