回答編集履歴

2

追記

2020/06/22 01:50

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -7,3 +7,41 @@
7
7
 
8
8
 
9
9
  ただ、適切なインデックスと適切なSQLなら、秒は掛からないと思いますけどね。
10
+
11
+
12
+
13
+ 追記
14
+
15
+ --
16
+
17
+ 駆動表が逆ですね。
18
+
19
+ ```SQL
20
+
21
+ select *
22
+
23
+ from baseball.player as 選手
24
+
25
+ left join baseball.pitch as 投手
26
+
27
+ on 選手.年度 = 投手.年度
28
+
29
+ and 選手.選手ID = 投手.投手ID
30
+
31
+ left join baseball.pitch as 打者
32
+
33
+ on 選手.年度 = 打者.年度
34
+
35
+ and 選手.選手ID = 打者.打者ID
36
+
37
+ ```
38
+
39
+ 上記であれば、以下のインデックスを準備すると改善されると思います。
40
+
41
+ player:(年度,選手ID)
42
+
43
+ pitch :(年度,投手ID), (年度,打者ID)
44
+
45
+
46
+
47
+ select項目は、**case**や**coalesce()**を活用すれば簡潔になるでしょう。

1

訂正

2020/06/22 01:50

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 一方のみのjoin で1,2秒が担保できるのなら、一方のみものをunion allで繋ぐと、倍程度の時間では済むょう
5
+ 一方のみのjoin で1,2秒が担保できるのなら、一方のみでjoinしたものをさらにjoinすると、倍程度の時間では済むかもれません
6
6
 
7
7
 
8
8