【发布时间】:2013-09-19 22:58:36
【问题描述】:
SELECT *
FROM members
WHERE memberid IN (SELECT follows.followingid
FROM follows
WHERE follows.memberid = '$memberid'
AND follows.followingid NOT IN (SELECT memberid
FROM userblock))
AND memberid NOT IN (SELECT blockmemberid
FROM userblock
WHERE memberid = '$memberid')
上面的查询在 MySQL 中执行需要将近 4 秒,我想知道是否有人对我如何改进/优化它以实现更快的执行时间有任何建议?
【问题讨论】:
-
我想问“为什么?”您能否详细说明此查询的逻辑?也许它应该被一个更好的完全取代。
-
你使用什么版本的 MySQL? MySQL 在子查询优化方面很差。
-
@Malkocoglu 我正在尝试在“关注”表中搜索与其有关系的表中的值 memberid。然后我想过滤掉用户块表中出现这种关系的任何值。
-
@zavg 我使用的是 MySQL 5.5.30 版
-
我认为有一个逻辑问题。你是如何使用用户块表的?是 userblock.memberid 是阻止别人的人吗?而 userblock.blockmemberid 就是被屏蔽的人。
标签: mysql optimization