File: index_merge_update.inc

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (130 lines) | stat: -rw-r--r-- 4,670 bytes parent folder | download
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
# 
# UPDATE statements 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;
INSERT INTO t2 SELECT * FROM t1;
ANALYZE TABLE t2;

#1. UPDATE statements with various combinations of comparison operators

# intersect optimization technique test cases for non-selects 
# are in a separate file(index_merge_intersect_dml.inc) 
# due to different table requirements. 

# union and sort_union

--let $query = WHERE key1=80 OR key4=49
--replace_column 10 #
--eval EXPLAIN UPDATE t1 SET key6=7 $query
--eval SELECT COUNT(*), SUM(key6) FROM t1 $query
--eval UPDATE t1 SET key6=7 $query
--eval SELECT COUNT(*), SUM(key6) FROM t1 $query

--let $query = WHERE (key3=80 AND key5 IS NOT NULL) OR (key2=49 AND key6 IS NULL)
--replace_column 10 #
--eval EXPLAIN UPDATE t1 SET key1=18 $query
--eval SELECT COUNT(*), SUM(key1) FROM t1 $query
--eval UPDATE t1 SET key1=18 $query
--eval SELECT COUNT(*), SUM(key1) FROM t1 $query

--let $query = WHERE (key4=42 AND key6 IS NOT NULL) OR (key1>4 AND key5 IS NULL) AND key2<>50
--replace_column 10 #
--eval EXPLAIN UPDATE t1 SET key3=18 $query
--eval SELECT COUNT(*), SUM(key3) FROM t1 $query
--eval UPDATE t1 SET key3=18 $query
--eval SELECT COUNT(*), SUM(key3) FROM t1 $query

--let $query = WHERE key2=80 OR key3=1025 OR key4 <=> NULL
--replace_column 10 #
--eval EXPLAIN UPDATE t1 SET key8=64 $query
--eval SELECT COUNT(*), SUM(key8) FROM t1 $query
--eval UPDATE t1 SET key8=64 $query
--eval SELECT COUNT(*), SUM(key8) FROM t1 $query

--let $query = WHERE (key1 < 3 OR key2 < 2) AND (key3 < 3 OR key4 < 3) AND (key5 < 2 OR key6 < 2)
--replace_column 10 #
--eval EXPLAIN UPDATE t1 SET key8=18 $query
--eval SELECT COUNT(*), SUM(key8) FROM t1 $query
--eval UPDATE t1 SET key8=18 $query
--eval SELECT COUNT(*), SUM(key8) FROM t1 $query

--let $query = WHERE key1 between 25 AND 40 OR key2 between 15 AND 49
--replace_column 10 #
--eval EXPLAIN UPDATE t1 SET key3=32 $query
--eval SELECT COUNT(*), SUM(key3) FROM t1 $query
--eval UPDATE t1 SET key3=32 $query
--eval SELECT COUNT(*), SUM(key3) FROM t1 $query

--let $query = WHERE key1 IN (15,70) OR key2 IN (15,70)
--replace_column 10 #
--eval EXPLAIN UPDATE t1 SET key7=25 $query
--eval SELECT COUNT(*), SUM(key7) FROM t1 $query
--eval UPDATE t1 SET key7=25 $query
--eval SELECT COUNT(*), SUM(key7) FROM t1 $query

#2. Statement with ORDER BY

--let $query = WHERE key5<5 OR key8<10 ORDER BY key1
--replace_column 10 #
--eval EXPLAIN UPDATE t1 SET key1=10 $query
--eval SELECT COUNT(*), SUM(key1) FROM t1 $query
--eval UPDATE t1 SET key1=10 $query
--eval SELECT COUNT(*), SUM(key1) FROM t1 $query

#3. Multi table SQL statements

--let $query = t1 left join t2 ON (t2.key1=t2.key1) SET t1.key4=15 WHERE t1.key5=40 OR t1.key4=15
--replace_column 10 #
--eval EXPLAIN UPDATE $query
SELECT COUNT(*), SUM(key4) FROM t1; 
--eval UPDATE $query
SELECT COUNT(*), SUM(key4) FROM t1;

# Statements with subqueries

--let $query2 = key6 < ANY (SELECT key6 FROM t1 WHERE key1=10 OR key5=3)
--let $query1 = WHERE (key3=28 OR key4=10) 
--replace_column 10 #
--eval EXPLAIN UPDATE t2 SET key7=7 $query1 AND $query2
--eval SELECT COUNT(*), SUM(key7) FROM t2 $query1 AND $query2
--eval UPDATE t2 SET key7=7 $query1 AND $query2
--eval SELECT COUNT(*), SUM(key7) FROM t2 $query1 AND $query2

--let $query3 = key1 < ANY (SELECT key1 FROM t1 WHERE key1<5 OR key4<7)
--let $query2 = key4 < SOME (SELECT key4 FROM t1 WHERE key1<5 OR key4<8)
--let $query1 = WHERE key1=25 OR key4=40
--replace_column 10 #
--eval EXPLAIN UPDATE t2 SET key2=2 $query1 AND ($query2 OR $query3)
--eval SELECT COUNT(*), SUM(key2) FROM t2 $query1 AND ($query2 OR $query3)
--eval UPDATE t2 SET key2=2 $query1 AND ($query2 OR $query3)
--eval SELECT COUNT(*), SUM(key2) FROM t2 $query1 AND ($query2 OR $query3)

--let $query = WHERE EXISTS (SELECT * FROM t1 WHERE key6<3 OR key4<10)
--replace_column 10 #
--eval EXPLAIN UPDATE t2 SET key3=20 $query
--eval SELECT COUNT(*), SUM(key3) FROM t2 $query
--eval UPDATE t2 SET key3=20 $query
--eval SELECT COUNT(*), SUM(key3) FROM t2 $query

# The following statement doesn't use index_merge optimization technique when 
# the table is created with single column index setup.

--let $query = WHERE key5=80 OR key6=49
--replace_column 10 #
--eval EXPLAIN UPDATE t1 SET key8=50 $query
--eval SELECT COUNT(*), SUM(key8) FROM t1 $query
--eval UPDATE t1 SET key8=50 $query
--eval SELECT COUNT(*), SUM(key8) FROM t1 $query

#
# end of UPDATE statements
#