回答編集履歴
2
追記
answer
CHANGED
@@ -26,4 +26,36 @@
|
|
26
26
|
ORDER BY s.student_id
|
27
27
|
```
|
28
28
|
likeでの部分一致はインデックスは使用されないので、likeじゃなきゃダメかどうかを見直しした方が良いと思います。
|
29
|
-
※`birth_month` が誕生月ならlikeじゃなくても良いのでは?
|
29
|
+
※`birth_month` が誕生月ならlikeじゃなくても良いのでは?
|
30
|
+
|
31
|
+
> 先にサブクエリでIDを絞り込んでいます。
|
32
|
+
|
33
|
+
厳密にこの方法でという事なら以下のような記述ですね。
|
34
|
+
```SQL
|
35
|
+
SELECT s.student_id
|
36
|
+
, s.student_name
|
37
|
+
, t.telephone_number
|
38
|
+
, a.area
|
39
|
+
, b.birth_month
|
40
|
+
FROM student_table AS s
|
41
|
+
LEFT JOIN telephone_number_table AS t
|
42
|
+
ON s.telephone_number = t.telephone_number
|
43
|
+
LEFT JOIN area_table AS a
|
44
|
+
ON s.area_id= a.area_id
|
45
|
+
LEFT JOIN birth_month_table AS b
|
46
|
+
ON s.birth_month = b.birth_month
|
47
|
+
where s.student_id in (
|
48
|
+
select s.student_id
|
49
|
+
from student_table as s
|
50
|
+
inner join tb_trn_rn_css_order o
|
51
|
+
on s.student_id=o.css_id
|
52
|
+
left join area_table as a
|
53
|
+
on s.area_id= a.area_id
|
54
|
+
where cast(s.student_id as text) like '%${key}%'
|
55
|
+
or s.student_name like '%${key}%'
|
56
|
+
or s.telephone_number like '%${key}%'
|
57
|
+
or a.area like '%${key}%'
|
58
|
+
or s.birth_month like '%${key}%'
|
59
|
+
)
|
60
|
+
ORDER BY s.student_id
|
61
|
+
```
|
1
推敲
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
SQLのチューニング以前にSQLの組み立て方に無駄があります。
|
1
|
+
SQLのチューニング以前にSQLの組み立て方に無駄(というか問題)があります。
|
2
2
|
Like条件部分は相関である必要は見当たりません。
|
3
3
|
|
4
4
|
以下の様にすると、`CSS_ID`で絞り込まれたものに対してlikeでのフィルターが掛かるようになると思いますので改善はされると思います。
|