~ubuntu-branches/ubuntu/trusty/drizzle/trusty

« back to all changes in this revision

Viewing changes to tests/include/index_merge1.inc

  • Committer: Bazaar Package Importer
  • Author(s): Monty Taylor
  • Date: 2010-03-18 12:12:31 UTC
  • Revision ID: james.westby@ubuntu.com-20100318121231-k6g1xe6cshbwa0f8
Tags: upstream-2010.03.1347
ImportĀ upstreamĀ versionĀ 2010.03.1347

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# include/index_merge1.inc
 
2
#
 
3
# Index merge tests
 
4
#
 
5
# The variables
 
6
#     $engine_type         -- storage engine to be tested
 
7
#     $merge_table_support -- 1 storage engine supports merge tables
 
8
#                          -- 0 storage engine does not support merge tables
 
9
# have to be set before sourcing this script.
 
10
#
 
11
# Note: The comments/expectations refer to MyISAM.
 
12
#       They might be not valid for other storage engines.
 
13
#
 
14
# Last update:
 
15
# 2006-08-02 ML test refactored
 
16
#               old name was t/index_merge.test
 
17
#               main code went into include/index_merge1.inc
 
18
#
 
19
 
 
20
--echo #---------------- Index merge test 1 -------------------------------------------
 
21
 
 
22
eval SET SESSION STORAGE_ENGINE = $engine_type;
 
23
 
 
24
--disable_warnings
 
25
drop table if exists t0, t1, t2, t3, t4;
 
26
--enable_warnings
 
27
 
 
28
# Create and fill a table with simple keys
 
29
create table t0
 
30
(
 
31
  key1 int not null,
 
32
  INDEX i1(key1)
 
33
);
 
34
 
 
35
--disable_query_log
 
36
insert into t0 values (1),(2),(3),(4),(5),(6),(7),(8);
 
37
 
 
38
let $1=7;
 
39
set @d=8;
 
40
begin;
 
41
while ($1)
 
42
{
 
43
  eval insert into t0 select key1+@d from t0;
 
44
  eval set @d=@d*2;
 
45
  dec $1;
 
46
}
 
47
commit;
 
48
--enable_query_log
 
49
 
 
50
alter table t0 add key2 int not null, add index i2(key2);
 
51
alter table t0 add key3 int not null, add index i3(key3);
 
52
alter table t0 add key4 int not null, add index i4(key4);
 
53
alter table t0 add key5 int not null, add index i5(key5);
 
54
alter table t0 add key6 int not null, add index i6(key6);
 
55
alter table t0 add key7 int not null, add index i7(key7);
 
56
alter table t0 add key8 int not null, add index i8(key8);
 
57
 
 
58
update t0 set key2=key1,key3=key1,key4=key1,key5=key1,key6=key1,key7=key1,key8=1024-key1;
 
59
analyze table t0;
 
60
 
 
61
# 1. One index
 
62
explain select * from t0 where key1 < 3 or key1 > 1020;
 
63
 
 
64
# 2. Simple cases
 
65
explain
 
66
select * from t0 where key1 < 3 or key2 > 1020;
 
67
select * from t0 where key1 < 3 or key2 > 1020;
 
68
 
 
69
explain select * from t0 where key1 < 3 or key2 <4;
 
70
 
 
71
explain
 
72
select * from t0 where (key1 > 30 and key1<35) or (key2 >32 and key2 < 40);
 
73
# Bug#21277: InnoDB, wrong result set, index_merge strategy, second index not evaluated
 
74
select * from t0 where (key1 > 30 and key1<35) or (key2 >32 and key2 < 40);
 
75
 
 
76
# 3. Check that index_merge doesn't break "ignore/force/use index"
 
77
explain select * from t0 ignore index (i2) where key1 < 3 or key2 <4;
 
78
explain select * from t0 where (key1 < 3 or key2 <4) and key3 = 50;
 
79
explain select * from t0 use index (i1,i2) where (key1 < 3 or key2 <4) and key3 = 50;
 
80
 
 
81
explain select * from t0 where (key1 > 1 or key2  > 2);
 
82
explain select * from t0 force index (i1,i2) where (key1 > 1 or key2  > 2);
 
83
 
 
84
 
 
85
# 4. Check if conjuncts are grouped by keyuse
 
86
explain
 
87
  select * from t0 where key1<3 or key2<3 or (key1>5 and key1<8) or
 
88
  (key1>10 and key1<12) or (key2>100 and key2<110);
 
89
 
 
90
# 5. Check index_merge with conjuncts that are always true/false
 
91
#    verify fallback to "range" if there is only one non-confluent condition
 
92
explain select * from t0 where key2 = 45 or key1 <=> null;
 
93
 
 
94
explain select * from t0 where key2 = 45 or key1 is not null;
 
95
explain select * from t0 where key2 = 45 or key1 is null;
 
96
 
 
97
#   the last conj. is always false and will be discarded
 
98
explain select * from t0 where key2=10 or key3=3 or key4 <=> null;
 
99
 
 
100
#   the last conj. is always true and will cause 'all' scan
 
101
explain select * from t0 where key2=10 or key3=3 or key4 is null;
 
102
 
 
103
#   some more complicated cases
 
104
explain select key1 from t0 where (key1 <=> null) or (key2 < 5) or
 
105
                                   (key3=10) or (key4 <=> null);
 
106
explain select key1 from t0 where (key1 <=> null) or (key1 < 5) or
 
107
                                   (key3=10) or (key4 <=> null);
 
108
 
 
109
# 6.Several ways to do index_merge, (ignored) index_merge vs. range
 
110
explain select * from t0 where
 
111
  (key1 < 3 or key2 < 3) and (key3 < 4 or key4 < 4) and (key5 < 5 or key6 < 5);
 
112
 
 
113
explain
 
114
select * from t0 where (key1 < 3 or key2 < 6) and (key1 < 7 or key3 < 4);
 
115
 
 
116
select * from t0 where (key1 < 3 or key2 < 6) and (key1 < 7 or key3 < 4);
 
117
 
 
118
 
 
119
explain select * from t0 where
 
120
  (key1 < 3 or key2 < 3) and (key3 < 4 or key4 < 4) and (key5 < 2 or key6 < 2);
 
121
 
 
122
#   now index_merge is not used at all when "range" is possible
 
123
explain select * from t0 where
 
124
  (key1 < 3 or key2 < 3) and (key3 < 100);
 
125
 
 
126
#   this even can cause "all" scan:
 
127
explain select * from t0 where
 
128
  (key1 < 3 or key2 < 3) and (key3 < 1000);
 
129
 
 
130
 
 
131
# 7. Complex cases
 
132
#   tree_or(List<SEL_IMERGE>, range SEL_TREE).
 
133
explain select * from t0 where
 
134
    ((key1 < 4 or key2 < 4) and (key2 <5 or key3 < 4))
 
135
  or
 
136
    key2 > 5;
 
137
 
 
138
explain select * from t0 where
 
139
    ((key1 < 4 or key2 < 4) and (key2 <5 or key3 < 4))
 
140
  or
 
141
    key1 < 7;
 
142
 
 
143
select * from t0 where
 
144
    ((key1 < 4 or key2 < 4) and (key2 <5 or key3 < 4))
 
145
  or
 
146
    key1 < 7;
 
147
 
 
148
#   tree_or(List<SEL_IMERGE>, List<SEL_IMERGE>).
 
149
explain select * from t0 where
 
150
    ((key1 < 4 or key2 < 4) and (key3 <5 or key5 < 4))
 
151
  or
 
152
    ((key5 < 5 or key6 < 6) and (key7 <7 or key8 < 4));
 
153
 
 
154
explain select * from t0 where
 
155
    ((key3 <5 or key5 < 4) and (key1 < 4 or key2 < 4))
 
156
  or
 
157
    ((key7 <7 or key8 < 4) and (key5 < 5 or key6 < 6));
 
158
 
 
159
explain select * from t0 where
 
160
    ((key3 <5 or key5 < 4) and (key1 < 4 or key2 < 4))
 
161
  or
 
162
    ((key3 <7 or key5 < 2) and (key5 < 5 or key6 < 6));
 
163
 
 
164
explain select * from t0 where
 
165
    ((key3 <5 or key5 < 4) and (key1 < 4 or key2 < 4))
 
166
  or
 
167
    (((key3 <7 and key7 < 6) or key5 < 2) and (key5 < 5 or key6 < 6));
 
168
 
 
169
explain select * from t0 where
 
170
    ((key3 <5 or key5 < 4) and (key1 < 4 or key2 < 4))
 
171
  or
 
172
    ((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
 
173
 
 
174
explain select * from t0 force index(i1, i2, i3, i4, i5, i6 ) where
 
175
    ((key3 <5 or key5 < 4) and (key1 < 4 or key2 < 4))
 
176
  or
 
177
    ((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
 
178
 
 
179
# 8. Verify that "order by" after index merge uses filesort
 
180
select * from t0 where key1 < 5 or key8 < 4 order by key1;
 
181
 
 
182
explain
 
183
select * from t0 where key1 < 5 or key8 < 4 order by key1;
 
184
 
 
185
# 9. Check that index_merge cost is compared to 'index' where possible
 
186
create table t2 like t0;
 
187
insert into t2 select * from t0;
 
188
 
 
189
alter table t2 add index i1_3(key1, key3);
 
190
alter table t2 add index i2_3(key2, key3);
 
191
alter table t2 drop index i1;
 
192
alter table t2 drop index i2;
 
193
alter table t2 add index i321(key3, key2, key1);
 
194
 
 
195
#   index_merge vs 'index', index_merge is better.
 
196
explain select key3 from t2 where key1 = 100 or key2 = 100;
 
197
 
 
198
#   index_merge vs 'index', 'index' is better.
 
199
explain select key3 from t2 where key1 <100 or key2 < 100;
 
200
 
 
201
#   index_merge vs 'all', index_merge is better.
 
202
explain select key7 from t2 where key1 <100 or key2 < 100;
 
203
 
 
204
# 10. Multipart keys.
 
205
create table t4 (
 
206
  key1a int not null,
 
207
  key1b int not null,
 
208
  key2  int not null,
 
209
  key2_1 int not null,
 
210
  key2_2 int not null,
 
211
  key3  int not null,
 
212
  index i1a (key1a, key1b),
 
213
  index i1b (key1b, key1a),
 
214
  index i2_1(key2, key2_1),
 
215
  index i2_2(key2, key2_1)
 
216
);
 
217
 
 
218
insert into t4 select key1,key1,key1 div 10, key1 % 10, key1 % 10, key1 from t0;
 
219
 
 
220
#   the following will be handled by index_merge:
 
221
select * from t4 where key1a = 3 or key1b = 4;
 
222
explain select * from t4 where key1a = 3 or key1b = 4;
 
223
 
 
224
#   and the following will not
 
225
explain select * from t4 where key2 = 1 and (key2_1 = 1 or key3 = 5);
 
226
 
 
227
explain select * from t4 where key2 = 1 and (key2_1 = 1 or key2_2 = 5);
 
228
 
 
229
explain select * from t4 where key2_1 = 1 or key2_2 = 5;
 
230
 
 
231
 
 
232
# 11. Multitable selects
 
233
create table t1 like t0;
 
234
insert into t1 select * from t0;
 
235
 
 
236
#  index_merge on first table in join
 
237
explain select * from t0 left join t1 on (t0.key1=t1.key1)
 
238
  where t0.key1=3 or t0.key2=4;
 
239
 
 
240
select * from t0 left join t1 on (t0.key1=t1.key1)
 
241
  where t0.key1=3 or t0.key2=4;
 
242
 
 
243
explain
 
244
select * from t0,t1 where (t0.key1=t1.key1) and ( t0.key1=3 or t0.key2=4);
 
245
 
 
246
#  index_merge vs. ref
 
247
explain
 
248
select * from t0,t1 where (t0.key1=t1.key1) and
 
249
  (t0.key1=3 or t0.key2=4) and t1.key1<200;
 
250
 
 
251
#  index_merge vs. ref
 
252
explain
 
253
select * from t0,t1 where (t0.key1=t1.key1) and
 
254
  (t0.key1=3 or t0.key2<4) and t1.key1=2;
 
255
 
 
256
#  index_merge on second table in join
 
257
explain select * from t0,t1 where t0.key1 = 5 and
 
258
  (t1.key1 = t0.key1 or t1.key8 = t0.key1);
 
259
 
 
260
# Fix for bug#1974
 
261
explain select * from t0,t1 where t0.key1 < 3 and
 
262
  (t1.key1 = t0.key1 or t1.key8 = t0.key1);
 
263
 
 
264
#  index_merge inside union
 
265
explain select * from t1 where key1=3 or key2=4
 
266
  union select * from t1 where key1<4 or key3=5;
 
267
 
 
268
#  index merge in subselect
 
269
explain select * from (select * from t1 where key1 = 3 or key2 =3) as Z where key8 >5;
 
270
 
 
271
# 12. check for long index_merges.
 
272
create table t3 like t0;
 
273
insert into t3 select * from t0;
 
274
alter table t3 add key9 int not null, add index i9(key9);
 
275
alter table t3 add keyA int not null, add index iA(keyA);
 
276
alter table t3 add keyB int not null, add index iB(keyB);
 
277
alter table t3 add keyC int not null, add index iC(keyC);
 
278
update t3 set key9=key1,keyA=key1,keyB=key1,keyC=key1;
 
279
 
 
280
explain select * from t3 where
 
281
  key1=1 or key2=2 or key3=3 or key4=4 or
 
282
  key5=5 or key6=6 or key7=7 or key8=8 or
 
283
  key9=9 or keyA=10 or keyB=11 or keyC=12;
 
284
 
 
285
select * from t3 where
 
286
  key1=1 or key2=2 or key3=3 or key4=4 or
 
287
  key5=5 or key6=6 or key7=7 or key8=8 or
 
288
  key9=9 or keyA=10 or keyB=11 or keyC=12;
 
289
 
 
290
# Test for Bug#3183
 
291
explain select * from t0 where key1 < 3 or key2 < 4;
 
292
# Bug#21277: InnoDB, wrong result set, index_merge strategy, second index not evaluated
 
293
select * from t0 where key1 < 3 or key2 < 4;
 
294
 
 
295
update t0 set key8=123 where key1 < 3 or key2 < 4;
 
296
# Bug#21277: InnoDB, wrong result set, index_merge strategy, second index not evaluated
 
297
select * from t0 where key1 < 3 or key2 < 4;
 
298
 
 
299
delete from t0 where key1 < 3 or key2 < 4;
 
300
select * from t0 where key1 < 3 or key2 < 4;
 
301
select count(*) from t0;
 
302
 
 
303
# Test for BUG#4177
 
304
drop table t4;
 
305
create table t4 (a int);
 
306
insert into t4 values (1),(4),(3);
 
307
set @save_join_buffer_size=@@join_buffer_size;
 
308
set join_buffer_size= 4000;
 
309
explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5)
 
310
 from t0 as A force index(i1,i2), t0 as B force index (i1,i2)
 
311
  where (A.key1 < 500000 or A.key2 < 3)
 
312
  and   (B.key1 < 500000 or B.key2 < 3);
 
313
 
 
314
select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5)
 
315
 from t0 as A force index(i1,i2), t0 as B force index (i1,i2)
 
316
  where (A.key1 < 500000 or A.key2 < 3)
 
317
  and   (B.key1 < 500000 or B.key2 < 3);
 
318
 
 
319
update t0 set key1=1;
 
320
explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5)
 
321
 from t0 as A force index(i1,i2), t0 as B force index (i1,i2)
 
322
  where (A.key1 = 1 or A.key2 = 1)
 
323
  and   (B.key1 = 1 or B.key2 = 1);
 
324
 
 
325
select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5)
 
326
 from t0 as A force index(i1,i2), t0 as B force index (i1,i2)
 
327
  where (A.key1 = 1 or A.key2 = 1)
 
328
  and   (B.key1 = 1 or B.key2 = 1);
 
329
 
 
330
alter table t0 add filler1 char(200), add filler2 char(200), add filler3 char(200);
 
331
update t0 set key2=1, key3=1, key4=1, key5=1,key6=1,key7=1 where key7 < 500;
 
332
 
 
333
# The next query will not use index i7 in intersection if the OS doesn't
 
334
# support file sizes > 2GB. (ha_myisam::ref_length depends on this and index
 
335
# scan cost estimates depend on ha_myisam::ref_length)
 
336
--replace_column 9 #
 
337
--replace_result "4,4,4,4,4,4,4" X "4,4,4,4,4,4" X "i6,i7" "i6,i7?" "i6" "i6,i7?"
 
338
explain select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5)
 
339
 from t0 as A, t0 as B
 
340
 where (A.key1 = 1 and A.key2 = 1 and A.key3 = 1 and A.key4=1 and A.key5=1 and A.key6=1 and A.key7 = 1 or A.key8=1)
 
341
  and (B.key1 = 1 and B.key2 = 1 and B.key3 = 1 and B.key4=1 and B.key5=1 and B.key6=1 and B.key7 = 1 or B.key8=1);
 
342
 
 
343
select max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.key5 + B.key5)
 
344
 from t0 as A, t0 as B
 
345
 where (A.key1 = 1 and A.key2 = 1 and A.key3 = 1 and A.key4=1 and A.key5=1 and A.key6=1 and A.key7 = 1 or A.key8=1)
 
346
  and (B.key1 = 1 and B.key2 = 1 and B.key3 = 1 and B.key4=1 and B.key5=1 and B.key6=1 and B.key7 = 1 or B.key8=1);
 
347
 
 
348
set join_buffer_size= @save_join_buffer_size;
 
349
# Test for BUG#4177 ends
 
350
 
 
351
drop table t0, t1, t2, t3, t4;
 
352
 
 
353
# BUG#16166
 
354
CREATE TABLE t1 (
 
355
  cola char(3) not null, colb char(3) not null,  filler char(200),
 
356
  key(cola), key(colb)
 
357
);
 
358
INSERT INTO t1 VALUES ('foo','bar', 'ZZ'),('fuz','baz', 'ZZ');
 
359
 
 
360
--disable_query_log
 
361
begin;
 
362
let $1=9;
 
363
while ($1)
 
364
{
 
365
  eval INSERT INTO t1 SELECT * from t1 WHERE cola = 'foo';
 
366
  dec $1;
 
367
}
 
368
 
 
369
let $1=13;
 
370
while ($1)
 
371
{
 
372
  eval INSERT INTO t1 SELECT * from t1 WHERE cola <> 'foo';
 
373
  dec $1;
 
374
}
 
375
commit;
 
376
--enable_query_log
 
377
 
 
378
OPTIMIZE TABLE t1;
 
379
select count(*) from t1;
 
380
explain select * from t1 WHERE cola = 'foo' AND colb = 'bar';
 
381
explain select * from t1 force index(cola,colb) WHERE cola = 'foo' AND colb = 'bar';
 
382
drop table t1;
 
383
 
 
384
#
 
385
# BUG#20256 - LOCK WRITE - MyISAM
 
386
#
 
387
CREATE TABLE t1(a INT);
 
388
INSERT INTO t1 VALUES(1);
 
389
CREATE TABLE t2(a INT, b INT, dummy CHAR(16) DEFAULT '', KEY(a), KEY(b));
 
390
INSERT INTO t2(a,b) VALUES
 
391
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
392
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
393
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
394
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
395
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
396
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
397
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
398
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
399
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
400
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
401
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
402
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
403
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
404
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
405
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
406
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
407
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
408
(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),
 
409
(1,2);
 
410
LOCK TABLES t1 WRITE, t2 WRITE;
 
411
INSERT INTO t2(a,b) VALUES(1,2);
 
412
SELECT t2.a FROM t1,t2 WHERE t2.b=2 AND t2.a=1;
 
413
UNLOCK TABLES;
 
414
DROP TABLE t1, t2;
 
415
 
 
416
#
 
417
# BUG#29740: HA_KEY_SCAN_NOT_ROR wasn't set for MEMORY engine
 
418
 
419
CREATE TABLE `t1` (
 
420
  `a` int(11) DEFAULT NULL,
 
421
  `filler` char(200) DEFAULT NULL,
 
422
  `b` int(11) DEFAULT NULL,
 
423
  KEY `a` (`a`),
 
424
  KEY `b` (`b`)
 
425
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
 
426
 
 
427
insert into t1 values
 
428
(0, 'filler', 0), (1, 'filler', 1), (2, 'filler', 2), (3, 'filler', 3), 
 
429
(4, 'filler', 4), (5, 'filler', 5), (6, 'filler', 6), (7, 'filler', 7), 
 
430
(8, 'filler', 8), (9, 'filler', 9), (0, 'filler', 0), (1, 'filler', 1), 
 
431
(2, 'filler', 2), (3, 'filler', 3), (4, 'filler', 4), (5, 'filler', 5), 
 
432
(6, 'filler', 6), (7, 'filler', 7), (8, 'filler', 8), (9, 'filler', 9), 
 
433
(10, 'filler', 10), (11, 'filler', 11), (12, 'filler', 12), (13, 'filler', 13),
 
434
(14, 'filler', 14), (15, 'filler', 15), (16, 'filler', 16), (17, 'filler', 17), 
 
435
(18, 'filler', 18), (19, 'filler', 19), (4, '5      ', 0), (5, '4      ', 0), 
 
436
(4, '4      ', 0), (4, 'qq     ', 5), (5, 'qq     ', 4), (4, 'zz     ', 4);
 
437
 
 
438
create table t2(
 
439
  `a` int(11) DEFAULT NULL,
 
440
  `filler` char(200) DEFAULT NULL,
 
441
  `b` int(11) DEFAULT NULL,
 
442
  KEY USING BTREE (`a`),
 
443
  KEY USING BTREE (`b`)
 
444
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
 
445
insert into t2 select * from t1;
 
446
 
 
447
--echo must use sort-union rather than union:
 
448
--replace_column 9 #
 
449
explain select * from t1 where a=4 or b=4;
 
450
--sorted_result
 
451
select * from t1 where a=4 or b=4;
 
452
--sorted_result
 
453
select * from t1 ignore index(a,b) where a=4 or b=4;
 
454
 
 
455
--echo must use union, not sort-union:
 
456
--replace_column 9 #
 
457
explain select * from t2 where a=4 or b=4;
 
458
--sorted_result
 
459
select * from t2 where a=4 or b=4;
 
460
 
 
461
drop table t1, t2;
 
462