Freunde sql blockieren (super langsam sql ??)
-
15-11-2019 - |
Frage
hi, ich habe Probleme mit diesem SQL.Grundsätzlich zeigt es Status an, die meine Freunde veröffentlicht haben, und filtert die Freunde, die ich blockiert habe.
Der SQL ist SLOOOOOOWWWWWW, dauert zwar 2 Sekunden, um es zu verarbeiten.Was scheint das Problem zu sein.(Ich habe die Tabellen und einige Beispiele aufgelistet, wie es unter den SQL aussieht) Vielen Dank im Voraus! Die SQL .... generasacodicetagpre.
(Tabellenname: Blockliste) generasacodicetagpre.
(Tabellenname: Freundschaft) generasacodicetagpre.
(Tabellenname: Benutzer) generasacodicetagpre.
die Wandtabelle generasacodicetagpre.
danke !!!
Lösung
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)...
Andere Tipps
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?