質問編集履歴
3
ご指摘頂いた点について加筆致しました。(explain結果について)
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -57,8 +57,9 @@
|
|
|
57
57
|
set A.value=B.value;
|
|
58
58
|
```
|
|
59
59
|
explain結果
|
|
60
|
-
|
|
60
|
+
```MySQL5.7
|
|
61
61
|
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|
|
62
62
|
| ---: | --- | --- | --- | --- | --- | --- | --- | --- | ---: | ---: | --- |
|
|
63
63
|
| 1 | SIMPLE | B | \N | ALL | PRIMARY,テーブルB | \N | \N | \N | 1658424 | 100.00 | \N |
|
|
64
|
-
| 1 | UPDATE | A | \N | ref | PRIMARY,テーブルA | PRIMARY | 202 | B.id | 916054 | 1.11 | Using where |
|
|
64
|
+
| 1 | UPDATE | A | \N | ref | PRIMARY,テーブルA | PRIMARY | 202 | B.id | 916054 | 1.11 | Using where |
|
|
65
|
+
```
|
2
<コード>を利用した記述に修正しました。
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|2019-04-02|9999-12-31|1|1C|
|
|
11
11
|
|2018-05-02|2019-09-01|2|2A|
|
|
12
12
|
|2019-09-02|9999-12-31|2|2B|
|
|
13
|
-
|
|
13
|
+
```MySQL5.7
|
|
14
14
|
CREATE TABLE `テーブルA` (
|
|
15
15
|
`from_date` DATE NOT NULL,
|
|
16
16
|
`to_date` DATE NOT NULL,
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
COLLATE='utf8mb4_general_ci'
|
|
22
22
|
ENGINE=InnoDB
|
|
23
23
|
;
|
|
24
|
+
```
|
|
24
25
|
|
|
25
26
|
更新情報を持ったある時点のテーブルB(170万件程度)
|
|
26
27
|
|base_date(primary key)|id(primary key)|value|
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
|2019-10-10|1|1D|
|
|
29
30
|
|2019-10-10|2|2C|
|
|
30
31
|
|
|
32
|
+
```MySQL5.7
|
|
31
33
|
CREATE TABLE `テーブルB` (
|
|
32
34
|
`base_date` DATE NOT NULL,
|
|
33
35
|
`id` INT(11) NOT NULL,
|
|
@@ -37,6 +39,7 @@
|
|
|
37
39
|
COLLATE='utf8mb4_general_ci'
|
|
38
40
|
ENGINE=InnoDB
|
|
39
41
|
;
|
|
42
|
+
```
|
|
40
43
|
|
|
41
44
|
更新後のテーブルA
|
|
42
45
|
|from_date|to_date(primary key)|id(primary key)|value|
|
|
@@ -48,10 +51,11 @@
|
|
|
48
51
|
|2019-09-02|9999-12-31|2|2C|
|
|
49
52
|
|
|
50
53
|
現行の更新クエリ:
|
|
54
|
+
```MySQL5.7
|
|
51
55
|
update [テーブルA] A
|
|
52
56
|
inner join [テーブルB] B on A.id=B.id and B.base_date between A.from_date and A.to_date
|
|
53
57
|
set A.value=B.value;
|
|
54
|
-
|
|
58
|
+
```
|
|
55
59
|
explain結果
|
|
56
60
|
|
|
57
61
|
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|
1
ご指摘頂いた点について加筆致しました。(各テーブルのCreate及び現行クエリのexplain結果について)
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -11,12 +11,33 @@
|
|
|
11
11
|
|2018-05-02|2019-09-01|2|2A|
|
|
12
12
|
|2019-09-02|9999-12-31|2|2B|
|
|
13
13
|
|
|
14
|
+
CREATE TABLE `テーブルA` (
|
|
15
|
+
`from_date` DATE NOT NULL,
|
|
16
|
+
`to_date` DATE NOT NULL,
|
|
17
|
+
`id` INT(11) NOT NULL,
|
|
18
|
+
`value` VARCHAR(50) NOT NULL,
|
|
19
|
+
PRIMARY KEY (`to_date`, `id`)
|
|
20
|
+
)
|
|
21
|
+
COLLATE='utf8mb4_general_ci'
|
|
22
|
+
ENGINE=InnoDB
|
|
23
|
+
;
|
|
24
|
+
|
|
14
25
|
更新情報を持ったある時点のテーブルB(170万件程度)
|
|
15
26
|
|base_date(primary key)|id(primary key)|value|
|
|
16
27
|
|:--|:--:|--:|
|
|
17
28
|
|2019-10-10|1|1D|
|
|
18
29
|
|2019-10-10|2|2C|
|
|
19
30
|
|
|
31
|
+
CREATE TABLE `テーブルB` (
|
|
32
|
+
`base_date` DATE NOT NULL,
|
|
33
|
+
`id` INT(11) NOT NULL,
|
|
34
|
+
`value` VARCHAR(50) NOT NULL,
|
|
35
|
+
PRIMARY KEY (`base_date`, `id`)
|
|
36
|
+
)
|
|
37
|
+
COLLATE='utf8mb4_general_ci'
|
|
38
|
+
ENGINE=InnoDB
|
|
39
|
+
;
|
|
40
|
+
|
|
20
41
|
更新後のテーブルA
|
|
21
42
|
|from_date|to_date(primary key)|id(primary key)|value|
|
|
22
43
|
|:--|:--:|--:|--:|
|
|
@@ -29,4 +50,11 @@
|
|
|
29
50
|
現行の更新クエリ:
|
|
30
51
|
update [テーブルA] A
|
|
31
52
|
inner join [テーブルB] B on A.id=B.id and B.base_date between A.from_date and A.to_date
|
|
32
|
-
set A.value=B.value;
|
|
53
|
+
set A.value=B.value;
|
|
54
|
+
|
|
55
|
+
explain結果
|
|
56
|
+
|
|
57
|
+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|
|
58
|
+
| ---: | --- | --- | --- | --- | --- | --- | --- | --- | ---: | ---: | --- |
|
|
59
|
+
| 1 | SIMPLE | B | \N | ALL | PRIMARY,テーブルB | \N | \N | \N | 1658424 | 100.00 | \N |
|
|
60
|
+
| 1 | UPDATE | A | \N | ref | PRIMARY,テーブルA | PRIMARY | 202 | B.id | 916054 | 1.11 | Using where |
|