回答編集履歴
2
追記
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
推敲
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
SQLのチューニング以前にSQLの組み立て方に無駄があります。
|
1
|
+
SQLのチューニング以前にSQLの組み立て方に無駄(というか問題)があります。
|
2
2
|
|
3
3
|
Like条件部分は相関である必要は見当たりません。
|
4
4
|
|