mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Fixed cost calculations for materialized tables
One effect of this change in the test suite is that tests with very few rows changed to use sub queries instead of materialization. This is correct and expected as for these the materialization overhead is too high. A lot of tests where fixed to still use materialization by adding a few rows to the tables (most tests has only 2-3 rows and are thus easily affected when cost computations are changed). Other things: - Added more variables to TMPTABLE_COSTS for better cost calculation - Added cost of copying rows to TMPTABLE_COSTS lookup and write - Added THD::optimizer_cache_hit_ratio for easier cost calculations - Added DISK_FAST_READ_SIZE to be used when calculating costs when reading big blocks from a disk
This commit is contained in:
@ -899,6 +899,9 @@ select (select a+1) from t1;
|
||||
NULL
|
||||
4.5
|
||||
drop table t1;
|
||||
#
|
||||
# Null with keys
|
||||
#
|
||||
CREATE TABLE t1 (a int(11) NOT NULL default '0', PRIMARY KEY (a));
|
||||
CREATE TABLE t2 (a int(11) default '0', INDEX (a));
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4);
|
||||
@ -4441,10 +4444,13 @@ out_a MIN(b)
|
||||
1 2
|
||||
2 4
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#32036 EXISTS within a WHERE clause with a UNION crashes MySQL 5.122
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4);
|
||||
INSERT INTO t2 VALUES (1),(2);
|
||||
INSERT INTO t2 VALUES (1),(2),(1000);
|
||||
SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
|
||||
2
|
||||
2
|
||||
@ -4453,7 +4459,7 @@ EXPLAIN EXTENDED
|
||||
SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1276 Field or reference 'test.t1.a' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 /* select#1 */ select 2 AS `2` from `test`.`t1` where <expr_cache><`test`.`t1`.`a`>(exists(/* select#2 */ select 1 from `test`.`t2` where `test`.`t1`.`a` = `test`.`t2`.`a` limit 1))
|
||||
@ -4462,8 +4468,8 @@ SELECT 2 FROM t1 WHERE EXISTS ((SELECT 1 FROM t2 WHERE t1.a=t2.a) UNION
|
||||
(SELECT 1 FROM t2 WHERE t1.a = t2.a));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
3 DEPENDENT UNION t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
3 DEPENDENT UNION t2 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL NULL
|
||||
Warnings:
|
||||
Note 1276 Field or reference 'test.t1.a' of SELECT #2 was resolved in SELECT #1
|
||||
@ -5702,7 +5708,7 @@ DROP TABLE IF EXISTS ot1, ot4, it2, it3;
|
||||
CREATE TABLE t1 (a int) ;
|
||||
INSERT INTO t1 VALUES (NULL), (1), (NULL), (2);
|
||||
CREATE TABLE t2 (a int, INDEX idx(a)) ;
|
||||
INSERT INTO t2 VALUES (NULL), (1), (NULL);
|
||||
INSERT INTO t2 VALUES (NULL), (1), (NULL),(1000);
|
||||
SELECT * FROM t1
|
||||
WHERE EXISTS (SELECT a FROM t2 USE INDEX () WHERE t2.a = t1.a);
|
||||
a
|
||||
@ -5712,7 +5718,7 @@ SELECT * FROM t1
|
||||
WHERE EXISTS (SELECT a FROM t2 USE INDEX() WHERE t2.a = t1.a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 3 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT * FROM t1
|
||||
WHERE EXISTS (SELECT a FROM t2 WHERE t2.a = t1.a);
|
||||
a
|
||||
|
Reference in New Issue
Block a user