mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Fixed bug#36006: Optimizer does table scan for SELECT COUNT(*)
for ENGINE=MRG_MYISAM (should be optimized out). Before WL#3281 MERGE engine had the HA_NOT_EXACT_COUNT flag unset, and it worked with COUNT optimization as desired. After the removal of the HA_NOT_EXACT_COUNT flag neither HA_STATS_RECORDS_IS_EXACT (opposite to former HA_NOT_EXACT_COUNT flag) nor modern HA_HAS_RECORDS flag were not added to MERGE table flag mask. 1. The HA_HAS_RECORDS table flag has been set. 2. The ha_myisammrg::records method has been overridden to calculate total number of records in underlying tables.
This commit is contained in:
@@ -2006,3 +2006,19 @@ test.t1 optimize status OK
|
||||
FLUSH TABLES m1, t1;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1, m1;
|
||||
CREATE TABLE t1(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2)) ENGINE=MYISAM;
|
||||
CREATE TABLE t2(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2)) ENGINE=MYISAM;
|
||||
CREATE TABLE t3(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2)) ENGINE=MYISAM;
|
||||
CREATE TABLE t4(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2))
|
||||
ENGINE=MRG_MYISAM UNION=(t1, t2, t3);
|
||||
INSERT INTO t1 VALUES (1,1), (1,2),(1,3), (1,4);
|
||||
INSERT INTO t2 VALUES (2,1), (2,2),(2,3), (2,4);
|
||||
INSERT INTO t3 VALUES (3,1), (3,2),(3,3), (3,4);
|
||||
EXPLAIN SELECT COUNT(*) FROM t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
EXPLAIN SELECT COUNT(*) FROM t4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
DROP TABLE t1, t2, t3, t4;
|
||||
End of 5.1 tests
|
||||
|
||||
Reference in New Issue
Block a user