友達のブロックSQL(スーパースローSQL ??)
-
15-11-2019 - |
質問
こんにちはIMこのSQLに問題があります。基本的にそれは私の友人が投稿したステータスを表示し、それは私がブロックした友達を除外します。 ...それは、それを処理するために2秒かかるのに
SQLがslooooowwwwwwwです。問題であると想定されるのは。(IVEはテーブルとそれがSQLの下に見える方法のいくつかの例を事前に表示しました) SQL ....
SELECT from_user_id,content,wall.date, wall.wall_type, users.id, users.displayname
FROM wall
INNER JOIN friendship ON ( wall.from_user_id =friendship.user_a OR wall.from_user_id = friendship.user_b )
INNER JOIN users ON (wall.from_user_id = users.id)WHERE users.id not in (select blocked_id from blocklist where user_id = 1) and (wall.wall_type = 'home' OR wall.wall_type = 'profile' or wall.wall_type = 'topro') AND (
(friendship.user_a = 1 and friendship.user_b = wall.from_user_id)
or
(friendship.user_a = wall.from_user_id and friendship.user_b = 1) or (wall.user_id_of_wall = 1 or type_id = 1 or from_user_id = 1))GROUP BY wall_id ORDER BY date DESC LIMIT 10
.
(テーブル名:BlockList)
user_id | blocked_id
1 74
1 70
1 94
1 81
.
(テーブル名:友人)
user_a user_b status date
1 93 1 1297323354
1 79 1 1297323409
1 81 1 1297323403
1 82 1 1297323398
1 85 1 1297323389
1 90 1 1297323367
1 89 1 1297323373
.
(テーブル名:ユーザー)
id displayname
1 Kenny Jack
8 Wale Robinson
7 Victor WIlliams
6 Micheal Harris
9 Micheal Boston
10 Yestor Smith
.
壁テーブル
wall_id wall_type user_id_of_wall type_id from_user_id content viewed date
5 profile 8 8 8 Just chilling! 0 1296858001
.
ありがとう!!!
解決
NOT IN is used for fixed values, use NOT EXISTS instead :
SELECT from_user_id,content,wall.date, wall.wall_type, users.id, users.displayname
FROM wall
INNER JOIN friendship ON ( wall.from_user_id =friendship.user_a OR wall.from_user_id = friendship.user_b )
INNER JOIN users ON (wall.from_user_id = users.id)
WHERE not exists (select * from blocklist where users.id = blocked_id AND user_id = 1) and wall.wall_type IN ('home', 'profile', 'topro') AND (
(friendship.user_a = 1 and friendship.user_b = wall.from_user_id)
or
(friendship.user_a = wall.from_user_id and friendship.user_b = 1) or (wall.user_id_of_wall = 1 or type_id = 1 or from_user_id = 1))
GROUP BY wall_id
ORDER BY date DESC LIMIT 10
[EDIT] Use IN for fixed values (wall_type)...
他のヒント
always use WITH (NOLOCK) on read-only queries!
also, please remove all your paranthesis on your JOIN clause, did you copy and paste this from MS Access?
所属していません StackOverflow