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

回答編集履歴

2

追記

2020/09/19 00:35

投稿

sazi
sazi

スコア25430

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

推敲

2020/09/19 00:35

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,4 +1,4 @@
1
- SQLのチューニング以前にSQLの組み立て方に無駄があります。
1
+ SQLのチューニング以前にSQLの組み立て方に無駄(というか問題)があります。
2
2
  Like条件部分は相関である必要は見当たりません。
3
3
 
4
4
  以下の様にすると、`CSS_ID`で絞り込まれたものに対してlikeでのフィルターが掛かるようになると思いますので改善はされると思います。