diff --git a/mysql-test/r/distinct.result b/mysql-test/r/distinct.result index a2ff10594e6..a3d1e8bf3bb 100644 --- a/mysql-test/r/distinct.result +++ b/mysql-test/r/distinct.result @@ -537,7 +537,7 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 index NULL PRIMARY 8 NULL 3 Using index EXPLAIN SELECT DISTINCT a,a FROM t2; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t2 index NULL PRIMARY 8 NULL 3 Using index; Using temporary +1 SIMPLE t2 index NULL PRIMARY 8 NULL 3 Using index EXPLAIN SELECT DISTINCT b,a FROM t2; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 index NULL PRIMARY 8 NULL 3 Using index diff --git a/sql/sql_select.cc b/sql/sql_select.cc index eec572a6dfc..3ecac9532ca 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -874,7 +874,11 @@ JOIN::optimize() The FROM clause must contain a single non-constant table. */ if (tables - const_tables == 1 && (group_list || select_distinct) && - !tmp_table_param.sum_func_count) + !tmp_table_param.sum_func_count && + (!join_tab[const_tables].select || + !join_tab[const_tables].select->quick || + join_tab[const_tables].select->quick->get_type() != + QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX)) { if (group_list && list_contains_unique_index(join_tab[const_tables].table, @@ -11279,9 +11283,9 @@ static bool list_contains_unique_index(TABLE *table, bool (*find_func) (Field *, void *), void *data) { - for (uint keynr= 0; keynr < table->keys; keynr++) + for (uint keynr= 0; keynr < table->s->keys; keynr++) { - if (keynr == table->primary_key || + if (keynr == table->s->primary_key || (table->key_info[keynr].flags & HA_NOSAME)) { KEY *keyinfo= table->key_info + keynr;