回答編集履歴

1

追記

2019/10/11 10:16

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -9,3 +9,45 @@
9
9
 
10
10
 
11
11
  実行計画を確認すれば、もっと明らかにはなるでしょうが。
12
+
13
+
14
+
15
+ 追記
16
+
17
+ --
18
+
19
+ 変更後
20
+
21
+ ```Explain
22
+
23
+ Nested Loop Left Join
24
+
25
+  (cost=2719.23..3363.87 rows=1 width=11)
26
+
27
+  (actual time=1606.520..169663.178 rows=47 loops=1)
28
+
29
+  Join Filter:
30
+
31
+   (((oh.purchase_code)::text = (a1.xxx)::text) AND ((gd.yyy)::text = (a1.yyy)::text))
32
+
33
+ ```
34
+
35
+ 変更前
36
+
37
+ ```Explain
38
+
39
+ Hash Left Join
40
+
41
+ (cost=3397.63..3401.18 rows=129 width=11)
42
+
43
+ (actual time=3364.634..3364.695 rows=188 loops=1)
44
+
45
+ Hash Cond:
46
+
47
+ (((a1.xxx)::text = (oh.xxx)::text) AND ((a1.yyy)::text = (gd.yyy)::text))
48
+
49
+ ```
50
+
51
+ 実行計画で見ての通り結合時のメソッドが変わってしまっていて、**actual time**が増大していますね。
52
+
53
+ ここが変更前と同じくhash joinになるような、インデックスを適用して下さい。