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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
#
# INSERT and REPLACE using index_merge optimization
#
# The include file works as intended only when index_merge_single_col_setup.inc
# or index_merge_multi_col_setup.inc is used. The table t1 set-up is done in
# these two include files.
--disable_warnings
DROP TABLE IF EXISTS t2;
--enable_warnings
CREATE TABLE t2 LIKE t1;
let $i=10;
while ($i)
{
INSERT INTO t2 VALUES (rand()*6, rand()*6, rand()*6, rand()*6,
rand()*6, rand()*6, rand()*6, rand()*6);
dec $i;
}
ANALYZE TABLE t2;
# intersect optimization technique test cases for non-selects
# are in a separate file(index_merge_intersect_dml.inc)
# due to different table requirements.
#
# REPLACE
#
# union
--let $query = INTO t2 SELECT * FROM t1 WHERE key3=1025 OR key5 IS NULL
--replace_column 10 #
--eval EXPLAIN REPLACE $query
--eval SELECT COUNT(*) FROM t2
--eval REPLACE $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
--let $query = INTO t2 SELECT * FROM t1 WHERE key1=48 OR key4=2 OR key6=3
--replace_column 10 #
--eval EXPLAIN REPLACE $query
--eval SELECT COUNT(*) FROM t2
--eval REPLACE $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
# sort_union
--let $query = INTO t2 SELECT * FROM t1 WHERE key1<2 OR key2<3
--replace_column 10 #
--eval EXPLAIN REPLACE $query
--eval SELECT COUNT(*) FROM t2
--eval REPLACE $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
--let $query = INTO t2 SELECT * FROM t1 WHERE (key1>30 AND key1<35) OR (key2>32 AND key2<40)
--replace_column 10 #
--eval EXPLAIN REPLACE $query
--eval SELECT COUNT(*) FROM t2
--eval REPLACE $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
# statements with use/force/ignore index
--let $query = INTO t2 SELECT * FROM t1 IGNORE INDEX(i2) WHERE key1<2 OR key2<3
--replace_column 10 #
--eval EXPLAIN REPLACE $query
--eval SELECT COUNT(*) FROM t2
--eval REPLACE $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
INSERT INTO t1 VALUES (42,42,42,42,3,3,3,3),(4,4,6,6,6,6,4,4);
ANALYZE TABLE t1;
--let $query = INTO t2 SELECT * FROM t1 USE INDEX(i6,i3) WHERE (key4=42 AND key6=3) OR (key1=4 AND key3=6)
--replace_column 10 #
--eval EXPLAIN REPLACE $query
--eval SELECT COUNT(*) FROM t2
--eval REPLACE $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
--let $query = INTO t2 SELECT * FROM t1 FORCE INDEX(i1,i2) WHERE (key1>1 OR key2>2)
--replace_column 10 #
--eval EXPLAIN REPLACE $query
--eval SELECT COUNT(*) FROM t2
--eval REPLACE $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
#
# INSERT
#
# union
INSERT INTO t1 VALUES (42,42,42,42,3,3,3,3),(4,4,6,6,6,6,4,4);
ANALYZE TABLE t1;
--let $query = INTO t2 SELECT * FROM t1 WHERE (key4=42 AND key6=3) OR (key1=4 AND key3=6) AND key5<>50
--replace_column 10 #
--eval EXPLAIN INSERT $query
--eval SELECT COUNT(*) FROM t2
--eval INSERT $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
# sort_union
--let $query = INTO t2 SELECT * FROM t1 WHERE key2=10 OR key3=3 OR key4 <=> null
--replace_column 10 #
--eval EXPLAIN INSERT $query
--eval SELECT COUNT(*) FROM t2
--eval INSERT $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
# statements with use/force/ignore index
--let $query = INTO t2 SELECT * FROM t1 IGNORE INDEX(i1) WHERE key1<2 OR key2<3
--replace_column 10 #
--eval EXPLAIN INSERT $query
--eval SELECT COUNT(*) FROM t2
--eval INSERT $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
--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);
--replace_column 10 #
--eval EXPLAIN INSERT $query
--eval SELECT COUNT(*) FROM t2
--eval INSERT $query
--eval ANALYZE TABLE t2;
--eval SELECT COUNT(*) FROM t2
--let $query = INTO t2 SELECT * FROM t1 FORCE INDEX(i4,i5) WHERE (key4>3 OR key5>5)
--replace_column 10 #
--eval EXPLAIN INSERT $query
--eval SELECT COUNT(*) FROM t2
--eval INSERT $query
--eval SELECT COUNT(*) FROM t2
#
# end
#
|