回答編集履歴

7

追記

2019/01/07 09:54

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -67,3 +67,81 @@
67
67
  ここは先ず、`t_message_mng`にpost_idとuser_idのインデックスが必要ですね。
68
68
 
69
69
  先ずは両方の項目を持ったインデックスを適用して、改善されないなら、別々のインデックスにして、or結合じゃなく、left join で各々結合する。
70
+
71
+
72
+
73
+ 追記
74
+
75
+ --
76
+
77
+ 以下は問題部分だけのSQLです。
78
+
79
+ 先ずはこれで検証してみましょう。
80
+
81
+ ```SQL
82
+
83
+ WITH tenant_post_detail_list AS (select ~)
84
+
85
+ SELECT
86
+
87
+ mm.*
88
+
89
+ ,tpl.tenant_post_name
90
+
91
+ FROM
92
+
93
+ .t_message_mng AS mm
94
+
95
+ INNER JOIN tenant_post_detail_list tpl
96
+
97
+ ON
98
+
99
+ (tpl.post_id = mm.post_id
100
+
101
+ AND tpl.post_id <> 'tenant'
102
+
103
+ AND tpl.user_id = ' ')
104
+
105
+ OR
106
+
107
+ (tpl.user_id = mm.user_id
108
+
109
+ AND tpl.post_id = 'tenant'
110
+
111
+ AND tpl.user_id <> ' ')
112
+
113
+ ```
114
+
115
+ 上記を計測したのち、以下の組み替えたものを実行してみてください。
116
+
117
+ ```SQL
118
+
119
+ WITH tenant_post_detail_list AS (select ~)
120
+
121
+ SELECT
122
+
123
+ mm.*
124
+
125
+ , case when tpl1.post_id <> 'tenant' AND tpl1.user_id = ' ' then tpl1.tenant_post_name
126
+
127
+ else case when tpl2.post_id = 'tenant' AND tpl2.user_id <> ' ' then tpl2.tenant_post_name
128
+
129
+ end end tenant_post_name
130
+
131
+ FROM
132
+
133
+ .t_message_mng AS mm
134
+
135
+ left JOIN tenant_post_detail_list tpl1
136
+
137
+ ON .post_id = mm.post_id or
138
+
139
+ left JOIN tenant_post_detail_list tpl2
140
+
141
+ ON tpl2.user_id = mm.user_id
142
+
143
+ ```
144
+
145
+ さらに、`t_message_mng`にpost_idとuser_idのインデックスを追加し計測してみて下さい。
146
+
147
+ 効果が無ければ、インデックスが適用されるようにSQLを見直しです。

6

修正

2019/01/07 09:54

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -66,4 +66,4 @@
66
66
 
67
67
  ここは先ず、`t_message_mng`にpost_idとuser_idのインデックスが必要ですね。
68
68
 
69
- 別々のインデックスにして、or結合じゃなく、left join で各々結合する方が確実そうです
69
+ 先ずは両方の項目を持ったインデックスを適用して、改善されないなら、別々のインデックスにして、or結合じゃなく、left join で各々結合する。

5

推敲

2019/01/07 08:40

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  ※SQLが追加されたので。
42
42
 
43
- コストが掛かっているのは以下ですね。
43
+ 一番コストが掛かっているのは以下ですね。
44
44
 
45
45
  ```SQL
46
46
 

4

追記

2019/01/07 07:59

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -31,3 +31,39 @@
31
31
  ```
32
32
 
33
33
  `CTE Scan`部分は244ms掛かっていますので、可能ならチューニングですけど、それよりも、それとの突合で`Nested Loop`部分が3000msと500ms位になってますので、ここを何とかしないと改善されません。
34
+
35
+
36
+
37
+ 追記
38
+
39
+ --
40
+
41
+ ※SQLが追加されたので。
42
+
43
+ コストが掛かっているのは以下ですね。
44
+
45
+ ```SQL
46
+
47
+ INNER JOIN tenant_post_detail_list tpl
48
+
49
+ ON
50
+
51
+ (tpl.post_id = mm.post_id
52
+
53
+ AND tpl.post_id <> 'tenant'
54
+
55
+ AND tpl.user_id = ' ')
56
+
57
+ OR
58
+
59
+ (tpl.user_id = mm.user_id
60
+
61
+ AND tpl.post_id = 'tenant'
62
+
63
+ AND tpl.user_id <> ' ')
64
+
65
+ ```
66
+
67
+ ここは先ず、`t_message_mng`にpost_idとuser_idのインデックスが必要ですね。
68
+
69
+ 別々のインデックスにして、or結合じゃなく、left join で各々結合する方が確実そうです。

3

追記

2019/01/07 07:58

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -22,10 +22,12 @@
22
22
 
23
23
  ```
24
24
 
25
- -> Nested Loop (cost=132.68..4502.88 rows=115 width=1370) (actual time=27.183..3164.768 rows=24443 loops=1)
25
+ -> Nested Loop (cost=133.11..5279.44 rows=17 width=1386) (actual time=27.226..3547.307 rows=3790 loops=1)
26
26
 
27
+ -> Nested Loop (cost=132.68..4502.88 rows=115 width=1370) (actual time=27.183..3164.768 rows=24443 loops=1)
28
+
27
- -> CTE Scan on tenant_post_detail_list tpl (cost=0.00..0.42 rows=1 width=102) (actual time=12.285..256.152 rows=677 loops=1)
29
+ -> CTE Scan on tenant_post_detail_list tpl (cost=0.00..0.42 rows=1 width=102) (actual time=12.285..256.152 rows=677 loops=1)
28
30
 
29
31
  ```
30
32
 
31
- `CTE Scan`部分は244ms掛かっていますので、可能ならチューニングですけど、それよりも、それとの突合で`Nested Loop`部分が3137msになってますので、ここを何とかしないと改善されません。
33
+ `CTE Scan`部分は244ms掛かっていますので、可能ならチューニングですけど、それよりも、それとの突合で`Nested Loop`部分が3000msと500ms位になってますので、ここを何とかしないと改善されません。

2

修正

2019/01/07 07:50

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -28,4 +28,4 @@
28
28
 
29
29
  ```
30
30
 
31
- `CTE Scan`部分は256ms掛かっていますので、可能ならチューニングですけど、それよりも、それとの突合で`Nested Loop`部分が3164msになってますので、ここを何とかしないと改善されません。
31
+ `CTE Scan`部分は244ms掛かっていますので、可能ならチューニングですけど、それよりも、それとの突合で`Nested Loop`部分が3137msになってますので、ここを何とかしないと改善されません。

1

推敲

2019/01/07 07:47

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -22,9 +22,9 @@
22
22
 
23
23
  ```
24
24
 
25
- -> Nested Loop (cost=132.68..4502.88 rows=115 width=1370) (actual time=27.183..3164.768 rows=24443 loops=1)
25
+ -> Nested Loop (cost=132.68..4502.88 rows=115 width=1370) (actual time=27.183..3164.768 rows=24443 loops=1)
26
26
 
27
- -> CTE Scan on tenant_post_detail_list tpl (cost=0.00..0.42 rows=1 width=102) (actual time=12.285..256.152 rows=677 loops=1)
27
+ -> CTE Scan on tenant_post_detail_list tpl (cost=0.00..0.42 rows=1 width=102) (actual time=12.285..256.152 rows=677 loops=1)
28
28
 
29
29
  ```
30
30