MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
index_merge_insert-and-replace.inc
1 #
2 # INSERT and REPLACE using index_merge optimization
3 #
4 
5 # The include file works as intended only when index_merge_single_col_setup.inc
6 # or index_merge_multi_col_setup.inc is used. The table t1 set-up is done in
7 # these two include files.
8 
9 --disable_warnings
10 DROP TABLE IF EXISTS t2;
11 --enable_warnings
12 
13 CREATE TABLE t2 LIKE t1;
14 
15 let $i=10;
16 while ($i)
17 {
18  INSERT INTO t2 VALUES (rand()*6, rand()*6, rand()*6, rand()*6,
19  rand()*6, rand()*6, rand()*6, rand()*6);
20  dec $i;
21 }
22 
23 ANALYZE TABLE t2;
24 
25 # intersect optimization technique test cases for non-selects
26 # are in a separate file(index_merge_intersect_dml.inc)
27 # due to different table requirements.
28 
29 #
30 # REPLACE
31 #
32 
33 # union
34 
35 --let $query = INTO t2 SELECT * FROM t1 WHERE key3=1025 OR key5 IS NULL
36 --replace_column 9 #
37 --eval EXPLAIN REPLACE $query
38 --eval SELECT COUNT(*) FROM t2
39 --eval REPLACE $query
40 --eval SELECT COUNT(*) FROM t2
41 
42 --let $query = INTO t2 SELECT * FROM t1 WHERE key1=48 OR key4=2 OR key6=3
43 --replace_column 9 #
44 --eval EXPLAIN REPLACE $query
45 --eval SELECT COUNT(*) FROM t2
46 --eval REPLACE $query
47 --eval SELECT COUNT(*) FROM t2
48 
49 # sort_union
50 
51 --let $query = INTO t2 SELECT * FROM t1 WHERE key1<2 OR key2<3
52 --replace_column 9 #
53 --eval EXPLAIN REPLACE $query
54 --eval SELECT COUNT(*) FROM t2
55 --eval REPLACE $query
56 --eval SELECT COUNT(*) FROM t2
57 
58 --let $query = INTO t2 SELECT * FROM t1 WHERE (key1>30 AND key1<35) OR (key2>32 AND key2<40)
59 --replace_column 9 #
60 --eval EXPLAIN REPLACE $query
61 --eval SELECT COUNT(*) FROM t2
62 --eval REPLACE $query
63 --eval SELECT COUNT(*) FROM t2
64 
65 # statements with use/force/ignore index
66 
67 --let $query = INTO t2 SELECT * FROM t1 IGNORE INDEX(i2) WHERE key1<2 OR key2<3
68 --replace_column 9 #
69 --eval EXPLAIN REPLACE $query
70 --eval SELECT COUNT(*) FROM t2
71 --eval REPLACE $query
72 --eval SELECT COUNT(*) FROM t2
73 
74 INSERT INTO t1 VALUES (42,42,42,42,3,3,3,3),(4,4,6,6,6,6,4,4);
75 --let $query = INTO t2 SELECT * FROM t1 USE INDEX(i6,i3) WHERE (key4=42 AND key6=3) OR (key1=4 AND key3=6)
76 --replace_column 9 #
77 --eval EXPLAIN REPLACE $query
78 --eval SELECT COUNT(*) FROM t2
79 --eval REPLACE $query
80 --eval SELECT COUNT(*) FROM t2
81 
82 --let $query = INTO t2 SELECT * FROM t1 FORCE INDEX(i1,i2) WHERE (key1>1 OR key2>2)
83 --replace_column 9 #
84 --eval EXPLAIN REPLACE $query
85 --eval SELECT COUNT(*) FROM t2
86 --eval REPLACE $query
87 --eval SELECT COUNT(*) FROM t2
88 
89 #
90 # INSERT
91 #
92 
93 # union
94 
95 INSERT INTO t1 VALUES (42,42,42,42,3,3,3,3),(4,4,6,6,6,6,4,4);
96 --let $query = INTO t2 SELECT * FROM t1 WHERE (key4=42 AND key6=3) OR (key1=4 AND key3=6) AND key5<>50
97 --replace_column 9 #
98 --eval EXPLAIN INSERT $query
99 --eval SELECT COUNT(*) FROM t2
100 --eval INSERT $query
101 --eval SELECT COUNT(*) FROM t2
102 
103 # sort_union
104 
105 --let $query = INTO t2 SELECT * FROM t1 WHERE key2=10 OR key3=3 OR key4 <=> null
106 --replace_column 9 #
107 --eval EXPLAIN INSERT $query
108 --eval SELECT COUNT(*) FROM t2
109 --eval INSERT $query
110 --eval SELECT COUNT(*) FROM t2
111 
112 # statements with use/force/ignore index
113 
114 --let $query = INTO t2 SELECT * FROM t1 IGNORE INDEX(i1) WHERE key1<2 OR key2<3
115 --replace_column 9 #
116 --eval EXPLAIN INSERT $query
117 --eval SELECT COUNT(*) FROM t2
118 --eval INSERT $query
119 --eval SELECT COUNT(*) FROM t2
120 
121 --let $query = INTO t2 SELECT * FROM t1 USE INDEX(i5,i6) WHERE (key1<2 OR key2<2) AND (key3<3 OR key4<3) AND (key5<5 OR key6<5);
122 --replace_column 9 #
123 --eval EXPLAIN INSERT $query
124 --eval SELECT COUNT(*) FROM t2
125 --eval INSERT $query
126 --eval SELECT COUNT(*) FROM t2
127 
128 --let $query = INTO t2 SELECT * FROM t1 FORCE INDEX(i4,i5) WHERE (key4>3 OR key5>5)
129 --replace_column 9 #
130 --eval EXPLAIN INSERT $query
131 --eval SELECT COUNT(*) FROM t2
132 --eval INSERT $query
133 --eval SELECT COUNT(*) FROM t2
134 
135 #
136 # end
137 #