summaryrefslogtreecommitdiff
path: root/mysql-test/main/costs.test
blob: 6dcc41b57a332a523b8943b5efcabc154c577946 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#
# Test of cost calcuations. This test is using the Aria engine as the cost
# calculations are stable for it.
#
--source include/have_sequence.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;