~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/include/index_merge1.inc

  • Committer: Monty Taylor
  • Date: 2008-11-16 05:36:13 UTC
  • mto: (584.1.9 devel)
  • mto: This revision was merged to the branch mainline in revision 589.
  • Revision ID: monty@inaugust.com-20081116053613-bld4rqxhlkb49c02
Split out cache_row and type_holder.

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