mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Fixed bug mdev-5204.
Always use the value of table::file->stats.records when checking whether a table with HA_STATS_RECORDS_IS_EXACT flag contains not more than 1 record.
This commit is contained in:
@ -381,3 +381,39 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
||||
DROP TABLE t1;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# Bug mdev-5204: invalid impossible where after reading const tables
|
||||
# when use_stat_tables = 'preferably'
|
||||
#
|
||||
set use_stat_tables = 'preferably';
|
||||
CREATE TABLE t1 (id int PRIMARY KEY) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
CREATE TABLE t2 (name char(3)) ENGINE=MyISAM;
|
||||
ANALYZE TABLE t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 analyze status Table is already up to date
|
||||
INSERT INTO t2 VALUES ('USA'),('AUS');
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
id name
|
||||
1 AUS
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 0 Using where
|
||||
ANALYZE TABLE t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 analyze status OK
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
id name
|
||||
1 AUS
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 Using where
|
||||
DROP TABLE t1,t2;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
@ -408,5 +408,41 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
||||
DROP TABLE t1;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# Bug mdev-5204: invalid impossible where after reading const tables
|
||||
# when use_stat_tables = 'preferably'
|
||||
#
|
||||
set use_stat_tables = 'preferably';
|
||||
CREATE TABLE t1 (id int PRIMARY KEY) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
CREATE TABLE t2 (name char(3)) ENGINE=MyISAM;
|
||||
ANALYZE TABLE t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 analyze status Table is already up to date
|
||||
INSERT INTO t2 VALUES ('USA'),('AUS');
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
id name
|
||||
1 AUS
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 0 Using where
|
||||
ANALYZE TABLE t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 analyze status OK
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
id name
|
||||
1 AUS
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 Using where
|
||||
DROP TABLE t1,t2;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
set optimizer_switch=@save_optimizer_switch_for_stat_tables_test;
|
||||
SET SESSION STORAGE_ENGINE=DEFAULT;
|
||||
|
@ -205,3 +205,31 @@ DROP TABLE t1;
|
||||
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
||||
--echo #
|
||||
--echo # Bug mdev-5204: invalid impossible where after reading const tables
|
||||
--echo # when use_stat_tables = 'preferably'
|
||||
--echo #
|
||||
|
||||
set use_stat_tables = 'preferably';
|
||||
|
||||
CREATE TABLE t1 (id int PRIMARY KEY) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
ANALYZE TABLE t1;
|
||||
|
||||
CREATE TABLE t2 (name char(3)) ENGINE=MyISAM;
|
||||
ANALYZE TABLE t2;
|
||||
INSERT INTO t2 VALUES ('USA'),('AUS');
|
||||
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
|
||||
ANALYZE TABLE t2;
|
||||
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t2 WHERE name IN ( 'AUS','YEM' ) AND id = 1;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
@ -3691,7 +3691,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
|
||||
// All dep. must be constants
|
||||
if (s->dependent & ~(found_const_table_map))
|
||||
continue;
|
||||
if (table->stat_records() <= 1L &&
|
||||
if (table->file->stats.records <= 1L &&
|
||||
(table->file->ha_table_flags() & HA_STATS_RECORDS_IS_EXACT) &&
|
||||
!table->pos_in_table_list->embedding &&
|
||||
!((outer_join & table->map) &&
|
||||
|
Reference in New Issue
Block a user