teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2020/06/22 01:50

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -2,4 +2,23 @@
2
2
 
3
3
  一方のみのjoin で1,2秒が担保できるのなら、一方のみでjoinしたものをさらにjoinすると、倍程度の時間では済むかもしれません。
4
4
 
5
- ただ、適切なインデックスと適切なSQLなら、秒は掛からないと思いますけどね。
5
+ ただ、適切なインデックスと適切なSQLなら、秒は掛からないと思いますけどね。
6
+
7
+ 追記
8
+ --
9
+ 駆動表が逆ですね。
10
+ ```SQL
11
+ select *
12
+ from baseball.player as 選手
13
+ left join baseball.pitch as 投手
14
+ on 選手.年度 = 投手.年度
15
+ and 選手.選手ID = 投手.投手ID
16
+ left join baseball.pitch as 打者
17
+ on 選手.年度 = 打者.年度
18
+ and 選手.選手ID = 打者.打者ID
19
+ ```
20
+ 上記であれば、以下のインデックスを準備すると改善されると思います。
21
+ player:(年度,選手ID)
22
+ pitch :(年度,投手ID), (年度,打者ID)
23
+
24
+ select項目は、**case**や**coalesce()**を活用すれば簡潔になるでしょう。

1

訂正

2020/06/22 01:50

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  > join区を二つつなげて実行したのですが、実行に10分程度かかってしまいます。一方joinを1つだけにした場合、1,2秒で終了します。
2
2
 
3
- 一方のみのjoin で1,2秒が担保できるのなら、一方のみものをunion allで繋ぐと、倍程度の時間では済むょう
3
+ 一方のみのjoin で1,2秒が担保できるのなら、一方のみでjoinしたものをさらにjoinすると、倍程度の時間では済むかもれません
4
4
 
5
5
  ただ、適切なインデックスと適切なSQLなら、秒は掛からないと思いますけどね。