回答編集履歴

2

追記

2020/09/19 00:35

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -55,3 +55,67 @@
55
55
  likeでの部分一致はインデックスは使用されないので、likeじゃなきゃダメかどうかを見直しした方が良いと思います。
56
56
 
57
57
  ※`birth_month` が誕生月ならlikeじゃなくても良いのでは?
58
+
59
+
60
+
61
+ > 先にサブクエリでIDを絞り込んでいます。
62
+
63
+
64
+
65
+ 厳密にこの方法でという事なら以下のような記述ですね。
66
+
67
+ ```SQL
68
+
69
+ SELECT s.student_id
70
+
71
+ , s.student_name
72
+
73
+ , t.telephone_number
74
+
75
+ , a.area
76
+
77
+ , b.birth_month
78
+
79
+ FROM student_table AS s
80
+
81
+ LEFT JOIN telephone_number_table AS t
82
+
83
+ ON s.telephone_number = t.telephone_number
84
+
85
+ LEFT JOIN area_table AS a
86
+
87
+ ON s.area_id= a.area_id
88
+
89
+ LEFT JOIN birth_month_table AS b
90
+
91
+ ON s.birth_month = b.birth_month
92
+
93
+ where s.student_id in (
94
+
95
+ select s.student_id
96
+
97
+ from student_table as s
98
+
99
+ inner join tb_trn_rn_css_order o
100
+
101
+ on s.student_id=o.css_id
102
+
103
+ left join area_table as a
104
+
105
+ on s.area_id= a.area_id
106
+
107
+ where cast(s.student_id as text) like '%${key}%'
108
+
109
+ or s.student_name like '%${key}%'
110
+
111
+ or s.telephone_number like '%${key}%'
112
+
113
+ or a.area like '%${key}%'
114
+
115
+ or s.birth_month like '%${key}%'
116
+
117
+ )
118
+
119
+ ORDER BY s.student_id
120
+
121
+ ```

1

推敲

2020/09/19 00:35

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -1,4 +1,4 @@
1
- SQLのチューニング以前にSQLの組み立て方に無駄があります。
1
+ SQLのチューニング以前にSQLの組み立て方に無駄(というか問題)があります。
2
2
 
3
3
  Like条件部分は相関である必要は見当たりません。
4
4