~ubuntu-branches/ubuntu/trusty/mysql-5.6/trusty

« back to all changes in this revision

Viewing changes to mysql-test/include/index_merge_intersect_dml.inc

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-02-12 11:54:27 UTC
  • Revision ID: package-import@ubuntu.com-20140212115427-oq6tfsqxl1wuwehi
Tags: upstream-5.6.15
ImportĀ upstreamĀ versionĀ 5.6.15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# index_merge tests for statements using intersect algorithm
 
3
#
 
4
 
 
5
--disable_warnings
 
6
DROP TABLE IF EXISTS t1,t2;
 
7
--enable_warnings
 
8
 
 
9
CREATE TABLE t1 (
 
10
  pk MEDIUMINT NOT NULL AUTO_INCREMENT,
 
11
  a INT NOT NULL,
 
12
  b INT NOT NULL,
 
13
  c INT NOT NULL,
 
14
  d INT NOT NULL,
 
15
  PRIMARY KEY pk (pk),
 
16
  KEY idx_a (a),
 
17
  KEY idx_b (b),
 
18
  KEY idx_c (c),
 
19
  KEY idx_d (d)
 
20
);
 
21
 
 
22
--disable_query_log
 
23
 
 
24
# Inserting a lot of rows inorder to enable index_merge intersect
 
25
 
 
26
INSERT INTO t1(a,b,c,d) VALUES
 
27
               ( RAND()*5, RAND()*5, RAND()*5, RAND()*5 );
 
28
 
 
29
let $cnt=4;
 
30
while ($cnt)
 
31
{
 
32
  INSERT INTO t1(a,b,c,d) SELECT 6,6,6,6 FROM t1;
 
33
  dec $cnt;
 
34
}
 
35
 
 
36
INSERT INTO t1(a,b,c,d) SELECT 6, RAND()*5, RAND()*5, 
 
37
                                 RAND()*5 FROM t1 LIMIT 3;
 
38
INSERT INTO t1(a,b,c,d) SELECT RAND()*5, 6, RAND()*5, 
 
39
                                 RAND()*5 FROM t1 LIMIT 3;
 
40
INSERT INTO t1(a,b,c,d) SELECT RAND()*5, RAND()*5, 6, 
 
41
                                 RAND()*5 FROM t1 LIMIT 3;
 
42
INSERT INTO t1(a,b,c,d) SELECT RAND()*5, RAND()*5, 
 
43
                              RAND()*5, 6 FROM t1 LIMIT 3;
 
44
 
 
45
let $cnt=7;
 
46
while ($cnt)
 
47
{
 
48
  INSERT INTO t1(a,b,c,d) SELECT RAND()*5, RAND()*5, 
 
49
                              RAND()*5, RAND()*5 FROM t1;
 
50
  dec $cnt;
 
51
}
 
52
                      
 
53
--enable_query_log    
 
54
 
 
55
# The following statement analyzes and 
 
56
# stores the key distribution for a table.
 
57
 
 
58
ANALYZE TABLE t1;
 
59
 
 
60
# DELETEs are not included as index merge intersection 
 
61
# is disabled for DELETE statements.
 
62
 
 
63
# 1. UPDATE
 
64
 
 
65
--let $query = WHERE b=6 AND c=6 
 
66
--replace_result "idx_c,idx_b" "idx_b,idx_c"
 
67
--replace_column 9 #
 
68
--eval EXPLAIN UPDATE t1 SET a=2 $query
 
69
--eval SELECT COUNT(*), SUM(a) FROM t1 $query 
 
70
--eval UPDATE t1 SET a=2 $query
 
71
--eval SELECT COUNT(*), SUM(a) FROM t1 $query
 
72
 
 
73
--let $query = WHERE b=6 AND c=6 AND d=6
 
74
--replace_result idx_b idx_x idx_c idx_x idx_d idx_x
 
75
--replace_column 9 #
 
76
--eval EXPLAIN UPDATE t1 SET a=2 $query
 
77
--eval SELECT COUNT(*), SUM(a) FROM t1 $query
 
78
--eval UPDATE t1 SET a=2 $query
 
79
--eval SELECT COUNT(*), SUM(a) FROM t1 $query
 
80
 
 
81
--let $query = WHERE d=6 AND a IS NOT NULL AND b=6
 
82
--replace_result "idx_d,idx_b" "idx_b,idx_d"
 
83
--replace_column 9 #
 
84
--eval EXPLAIN UPDATE t1 SET c=6 $query
 
85
--eval SELECT COUNT(*), SUM(c) FROM t1 $query
 
86
--eval UPDATE t1 SET c=6 $query
 
87
--eval SELECT COUNT(*), SUM(c) FROM t1 $query
 
88
 
 
89
--let $query = WHERE d=6 AND a=6  AND c <> 6
 
90
--replace_column 9 #
 
91
--eval EXPLAIN UPDATE t1 SET b=0 $query
 
92
--eval SELECT COUNT(*), SUM(b) FROM t1 $query
 
93
--eval UPDATE t1 SET b=0 $query
 
94
--eval SELECT COUNT(*), SUM(b) FROM t1 $query
 
95
 
 
96
--let $query = WHERE d=6 AND a=6 AND c IN (1,2,3,4,5)
 
97
--replace_column 9 #
 
98
--eval EXPLAIN UPDATE t1 SET a=100 $query
 
99
--eval SELECT COUNT(*), SUM(a) FROM t1 $query
 
100
--eval UPDATE t1 SET a=100 $query
 
101
--eval SELECT COUNT(*), SUM(a) FROM t1 $query
 
102
 
 
103
# uses range scan instead of index_merge
 
104
 
 
105
--let $query = WHERE a=5 AND b=4 AND d<3
 
106
--replace_column 9 #
 
107
--eval EXPLAIN UPDATE t1 SET a=2 $query
 
108
--eval UPDATE t1 SET a=2 $query
 
109
 
 
110
# Any range condition over a primary key of an InnoDB table.
 
111
 
 
112
create table t2 (
 
113
  pk MEDIUMINT NOT NULL AUTO_INCREMENT,
 
114
  a INT NOT NULL,
 
115
  b INT NOT NULL,
 
116
  c INT NOT NULL,
 
117
  d INT NOT NULL,
 
118
  PRIMARY KEY pk (pk),
 
119
  KEY idx_a (a),
 
120
  KEY idx_b (b),
 
121
  KEY idx_c (c),
 
122
  KEY idx_d (d)
 
123
)engine=InnoDB;
 
124
 
 
125
INSERT INTO t2 SELECT * FROM t1;
 
126
ANALYZE TABLE t2;
 
127
 
 
128
--let $query = WHERE pk<2492 AND d=1
 
129
--replace_column 9 #
 
130
--eval EXPLAIN UPDATE t2 SET a=2 $query
 
131
--eval UPDATE t2 SET a=2 $query
 
132
 
 
133
# 2. REPLACE and INSERT  
 
134
 
 
135
CREATE TABLE t3(
 
136
  a INT NOT NULL,
 
137
  b INT NOT NULL,
 
138
  c INT NOT NULL,
 
139
  d INT NOT NULL,
 
140
  e INT
 
141
);
 
142
 
 
143
INSERT INTO t3(a,b,c,d,e) VALUES (3890,3890,3890,3890,3890);
 
144
INSERT INTO t3(a,b,c,d,e) VALUES (4000,4000,4000,4000,4000);
 
145
 
 
146
--let $query = INTO t3 SELECT * FROM t1 WHERE b=6 AND c=6
 
147
--replace_result "idx_c,idx_b" "idx_b,idx_c"
 
148
--replace_column 9 #
 
149
--eval EXPLAIN REPLACE $query
 
150
--eval SELECT COUNT(*) FROM t3
 
151
--eval REPLACE $query
 
152
--eval SELECT COUNT(*) FROM t3
 
153
 
 
154
--let $query = INTO t3 SELECT * FROM t1 WHERE d=6 AND a IS NOT NULL AND b=6
 
155
--replace_column 9 #
 
156
--replace_result "idx_d,idx_b" "idx_b,idx_d"
 
157
--eval EXPLAIN INSERT $query
 
158
--eval SELECT COUNT(*) FROM t3
 
159
--eval INSERT $query
 
160
--eval SELECT COUNT(*) FROM t3
 
161
 
 
162
# Test case for multi column set-up.
 
163
 
 
164
CREATE TABLE t4 (
 
165
  pk MEDIUMINT NOT NULL AUTO_INCREMENT,
 
166
  a INT NOT NULL,
 
167
  b INT NOT NULL,
 
168
  c INT NOT NULL,
 
169
  d INT NOT NULL,
 
170
  PRIMARY KEY pk (pk),
 
171
  KEY idx_cd (c,d),
 
172
  KEY idx_bd (b,d)
 
173
);
 
174
 
 
175
INSERT INTO t4 SELECT * FROM t1;
 
176
 
 
177
# The following statement analyzes and 
 
178
# stores the key distribution for a table.
 
179
 
 
180
ANALYZE TABLE t4;
 
181
 
 
182
--let $query = WHERE b=6 AND c=6 AND d=6
 
183
--replace_result idx_b idx_x idx_c idx_x idx_d idx_x
 
184
--replace_column 9 #
 
185
--eval EXPLAIN UPDATE t4 SET a=2 $query
 
186
--eval SELECT COUNT(*), SUM(a) FROM t4 $query
 
187
--eval UPDATE t4 SET a=2 $query
 
188
--eval SELECT COUNT(*), SUM(a)  FROM t4 $query
 
189
 
 
190
DROP TABLE t1,t2,t3,t4;
 
191
 
 
192
#
 
193
# end of test cases for intersect index_merge optimization technique
 
194
#
 
195
 
 
196
 
 
197