質問編集履歴
3
ご指摘頂いた点について加筆致しました。(explain結果について)
test
CHANGED
File without changes
|
test
CHANGED
@@ -116,7 +116,7 @@
|
|
116
116
|
|
117
117
|
explain結果
|
118
118
|
|
119
|
-
|
119
|
+
```MySQL5.7
|
120
120
|
|
121
121
|
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|
122
122
|
|
@@ -125,3 +125,5 @@
|
|
125
125
|
| 1 | SIMPLE | B | \N | ALL | PRIMARY,テーブルB | \N | \N | \N | 1658424 | 100.00 | \N |
|
126
126
|
|
127
127
|
| 1 | UPDATE | A | \N | ref | PRIMARY,テーブルA | PRIMARY | 202 | B.id | 916054 | 1.11 | Using where |
|
128
|
+
|
129
|
+
```
|
2
<コード>を利用した記述に修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
|2019-09-02|9999-12-31|2|2B|
|
24
24
|
|
25
|
-
|
25
|
+
```MySQL5.7
|
26
26
|
|
27
27
|
CREATE TABLE `テーブルA` (
|
28
28
|
|
@@ -44,6 +44,8 @@
|
|
44
44
|
|
45
45
|
;
|
46
46
|
|
47
|
+
```
|
48
|
+
|
47
49
|
|
48
50
|
|
49
51
|
更新情報を持ったある時点のテーブルB(170万件程度)
|
@@ -57,6 +59,8 @@
|
|
57
59
|
|2019-10-10|2|2C|
|
58
60
|
|
59
61
|
|
62
|
+
|
63
|
+
```MySQL5.7
|
60
64
|
|
61
65
|
CREATE TABLE `テーブルB` (
|
62
66
|
|
@@ -75,6 +79,8 @@
|
|
75
79
|
ENGINE=InnoDB
|
76
80
|
|
77
81
|
;
|
82
|
+
|
83
|
+
```
|
78
84
|
|
79
85
|
|
80
86
|
|
@@ -98,13 +104,15 @@
|
|
98
104
|
|
99
105
|
現行の更新クエリ:
|
100
106
|
|
107
|
+
```MySQL5.7
|
108
|
+
|
101
109
|
update [テーブルA] A
|
102
110
|
|
103
111
|
inner join [テーブルB] B on A.id=B.id and B.base_date between A.from_date and A.to_date
|
104
112
|
|
105
113
|
set A.value=B.value;
|
106
114
|
|
107
|
-
|
115
|
+
```
|
108
116
|
|
109
117
|
explain結果
|
110
118
|
|
1
ご指摘頂いた点について加筆致しました。(各テーブルのCreate及び現行クエリのexplain結果について)
test
CHANGED
File without changes
|
test
CHANGED
@@ -24,6 +24,28 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
+
CREATE TABLE `テーブルA` (
|
28
|
+
|
29
|
+
`from_date` DATE NOT NULL,
|
30
|
+
|
31
|
+
`to_date` DATE NOT NULL,
|
32
|
+
|
33
|
+
`id` INT(11) NOT NULL,
|
34
|
+
|
35
|
+
`value` VARCHAR(50) NOT NULL,
|
36
|
+
|
37
|
+
PRIMARY KEY (`to_date`, `id`)
|
38
|
+
|
39
|
+
)
|
40
|
+
|
41
|
+
COLLATE='utf8mb4_general_ci'
|
42
|
+
|
43
|
+
ENGINE=InnoDB
|
44
|
+
|
45
|
+
;
|
46
|
+
|
47
|
+
|
48
|
+
|
27
49
|
更新情報を持ったある時点のテーブルB(170万件程度)
|
28
50
|
|
29
51
|
|base_date(primary key)|id(primary key)|value|
|
@@ -33,6 +55,26 @@
|
|
33
55
|
|2019-10-10|1|1D|
|
34
56
|
|
35
57
|
|2019-10-10|2|2C|
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
CREATE TABLE `テーブルB` (
|
62
|
+
|
63
|
+
`base_date` DATE NOT NULL,
|
64
|
+
|
65
|
+
`id` INT(11) NOT NULL,
|
66
|
+
|
67
|
+
`value` VARCHAR(50) NOT NULL,
|
68
|
+
|
69
|
+
PRIMARY KEY (`base_date`, `id`)
|
70
|
+
|
71
|
+
)
|
72
|
+
|
73
|
+
COLLATE='utf8mb4_general_ci'
|
74
|
+
|
75
|
+
ENGINE=InnoDB
|
76
|
+
|
77
|
+
;
|
36
78
|
|
37
79
|
|
38
80
|
|
@@ -61,3 +103,17 @@
|
|
61
103
|
inner join [テーブルB] B on A.id=B.id and B.base_date between A.from_date and A.to_date
|
62
104
|
|
63
105
|
set A.value=B.value;
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
explain結果
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|
114
|
+
|
115
|
+
| ---: | --- | --- | --- | --- | --- | --- | --- | --- | ---: | ---: | --- |
|
116
|
+
|
117
|
+
| 1 | SIMPLE | B | \N | ALL | PRIMARY,テーブルB | \N | \N | \N | 1658424 | 100.00 | \N |
|
118
|
+
|
119
|
+
| 1 | UPDATE | A | \N | ref | PRIMARY,テーブルA | PRIMARY | 202 | B.id | 916054 | 1.11 | Using where |
|