diff --git a/mysql-test/main/selectivity_innodb.result b/mysql-test/main/selectivity_innodb.result index a147bdffc0f..9d6ac0b61ba 100644 --- a/mysql-test/main/selectivity_innodb.result +++ b/mysql-test/main/selectivity_innodb.result @@ -2322,5 +2322,14 @@ b 9 DROP TABLE t; # +# MDEV-30693: Assertion `dbl_records <= s->records' failed in apply_selectivity_for_table on SELECT +# +set @tmp_oucs= @@optimizer_use_condition_selectivity; +CREATE TABLE t1 (c INT KEY) ENGINE=InnoDB; +SELECT * FROM (SELECT * FROM t1) a JOIN (SELECT * FROM (SELECT * FROM t1 GROUP BY c) d WHERE c>1) b ON a.c=b.c; +c c +DROP TABLE t1; +SET optimizer_use_condition_selectivity=1; +# # End of 11.0 tests # diff --git a/mysql-test/main/selectivity_innodb.test b/mysql-test/main/selectivity_innodb.test index dc06287a1f9..efdb3c1853b 100644 --- a/mysql-test/main/selectivity_innodb.test +++ b/mysql-test/main/selectivity_innodb.test @@ -282,6 +282,15 @@ SELECT b FROM t WHERE a > 'a' GROUP BY b HAVING b >= 6 OR b <= 0; # Cleanup DROP TABLE t; +--echo # +--echo # MDEV-30693: Assertion `dbl_records <= s->records' failed in apply_selectivity_for_table on SELECT +--echo # +set @tmp_oucs= @@optimizer_use_condition_selectivity; +CREATE TABLE t1 (c INT KEY) ENGINE=InnoDB; +SELECT * FROM (SELECT * FROM t1) a JOIN (SELECT * FROM (SELECT * FROM t1 GROUP BY c) d WHERE c>1) b ON a.c=b.c; +DROP TABLE t1; +SET optimizer_use_condition_selectivity=1; + --echo # --echo # End of 11.0 tests --echo # diff --git a/sql/opt_split.cc b/sql/opt_split.cc index 99082813d7f..f2d536cd47b 100644 --- a/sql/opt_split.cc +++ b/sql/opt_split.cc @@ -741,7 +741,12 @@ void JOIN::add_keyuses_for_splitting() if (ext_keyuses_for_splitting->push(keyuse_ext_end)) goto err; - spl_opt_info->unsplit_card= join_record_count; + /* + Use the number of rows that was computed by + TABLE_LIST::fetch_number_of_rows(): + */ + spl_opt_info->unsplit_card= + rows2double(select_lex->master_unit()->derived->table->stat_records()); rec_len= table->s->rec_buff_length;