mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
0a7d291756
The assert was there to check that engines reports sensible numbers for IO. However this does not work in case of optimizer_disk_read_ratio=0. Fixed by removing the assert.
116 lines
3.7 KiB
Text
116 lines
3.7 KiB
Text
#
|
|
# Test of cost calculations. This test is using the Aria engine as the cost
|
|
# calculations are stable for it.
|
|
#
|
|
# This file also includes MDEV's that shows errors in cost calculation functions.
|
|
#
|
|
|
|
--source include/have_sequence.inc
|
|
--source include/have_innodb.inc
|
|
|
|
create table t1 (a int primary key, b int, c int, d int, e int, key ba (b,a), key bda (b,d,a), key cba (c,b,a), key cb (c,b), key d (d)) engine=aria;
|
|
insert into t1 select seq,seq,seq,seq,seq from seq_1_to_10;
|
|
insert into t1 values(20,2,2,2,2),(21,3,4,5,6);
|
|
|
|
--echo #
|
|
--echo # Get different scan costs
|
|
--echo #
|
|
|
|
explain select sum(e) as "table_scan" from t1;
|
|
--source include/last_query_cost.inc
|
|
explain select sum(a) as "index scan" from t1;
|
|
--source include/last_query_cost.inc
|
|
|
|
--echo #
|
|
--echo # Range scans should be used if we don't examine all rows in the table
|
|
--echo #
|
|
explain select count(a) from t1;
|
|
--source include/last_query_cost.inc
|
|
explain select count(*) from t1 where a > 0;
|
|
--source include/last_query_cost.inc
|
|
explain select count(*) from t1 where a > 1;
|
|
--source include/last_query_cost.inc
|
|
explain select count(*) from t1 where a > 2;
|
|
--source include/last_query_cost.inc
|
|
|
|
--echo #
|
|
--echo # Shorter indexes are prefered over longer indexs
|
|
--echo #
|
|
explain select sum(a+b) from t1;
|
|
--source include/last_query_cost.inc
|
|
explain select count(*) from t1 where b between 5 and 10;
|
|
--source include/last_query_cost.inc
|
|
explain select sum(b+c) from t1 where b between 5 and 6 and c between 5 and 6;
|
|
--source include/last_query_cost.inc
|
|
|
|
--echo # Cost of 'd' should be slightly smaller as key 'ba' is longer than 'd'
|
|
explain select count(*) from t1 where b > 6;
|
|
--source include/last_query_cost.inc
|
|
explain select count(*) from t1 where d > 6;
|
|
--source include/last_query_cost.inc
|
|
|
|
|
|
--echo #
|
|
--echo # Check covering index usage
|
|
--echo #
|
|
explain select a,b,c from t1 where a=b;
|
|
--source include/last_query_cost.inc
|
|
|
|
--echo #
|
|
--echo # Prefer ref keys over ranges
|
|
--echo #
|
|
|
|
explain select count(*) from t1 where b=2;
|
|
--source include/last_query_cost.inc
|
|
explain select count(*) from t1 where b=2 and c=2;
|
|
--source include/last_query_cost.inc
|
|
explain select count(*) from t1 where b=3 and c between 3 and 4;
|
|
--source include/last_query_cost.inc
|
|
|
|
--echo #
|
|
--echo # Prefer eq keys over ref keys
|
|
--echo #
|
|
|
|
explain select a,b,e from t1 where a=10 or a=11;
|
|
--source include/last_query_cost.inc
|
|
explain select a,b,e from t1 where d=10 or d=11;
|
|
--source include/last_query_cost.inc
|
|
|
|
drop table t1;
|
|
|
|
--echo #
|
|
--echo # MDEV-30328 Assertion `avg_io_cost != 0.0 || index_cost.io + row_cost.io == 0' failed in
|
|
--echo # Cost_estimate::total_cost()
|
|
--echo #
|
|
|
|
set @save=@@InnoDB.optimizer_disk_read_ratio;
|
|
set global InnoDB.optimizer_disk_read_ratio=0;
|
|
|
|
create table t1 (
|
|
`l_orderkey` int(11) NOT NULL,
|
|
`l_partkey` int(11) DEFAULT NULL,
|
|
`l_suppkey` int(11) DEFAULT NULL,
|
|
`l_linenumber` int(11) NOT NULL,
|
|
`l_extra` int(11) NOT NULL,
|
|
`l_quantity` double DEFAULT NULL,
|
|
`l_extendedprice` double DEFAULT NULL,
|
|
`l_discount` double DEFAULT NULL,
|
|
`l_tax` double DEFAULT NULL,
|
|
`l_returnflag` char(1) DEFAULT NULL,
|
|
`l_linestatus` char(1) DEFAULT NULL,
|
|
`l_shipDATE` date DEFAULT NULL,
|
|
`l_commitDATE` date DEFAULT NULL,
|
|
`l_receiptDATE` date DEFAULT NULL,
|
|
`l_shipinstruct` char(25) DEFAULT NULL,
|
|
`l_shipmode` char(10) DEFAULT NULL,
|
|
`l_comment` varchar(44) DEFAULT NULL,
|
|
PRIMARY KEY (`l_orderkey`),
|
|
UNIQUE (`l_linenumber`),
|
|
UNIQUE (`l_extra`) ,
|
|
KEY `l_suppkey` (l_suppkey, l_partkey),
|
|
KEY `long_suppkey` (l_partkey, l_suppkey, l_linenumber, l_extra) )
|
|
ENGINE= InnoDB;
|
|
explain select count(*) from test.t1 force index (l_suppkey) where l_suppkey >= 0 and l_partkey >=0;
|
|
drop table t1;
|
|
|
|
set global InnoDB.optimizer_disk_read_ratio=@save;
|