我想搜索不在特定组中的用户。 我在MYSQL中有一个工作查询,我需要一些建议和一些帮助。 这是我的询问。
SELECT id, fullname FROM users WHERE
id NOT IN (
SELECT user_id FROM group_members WHERE group_id = $groupId
)
AND fullname LIKE $serchKey
子查询获取组中的所有id然后在主查询的WHERE子句(id NOT IN)中使用它作为引用,我现在没有大数据。我想如果我有大数据并且所有id都作为参考使用(id NOT IN)我认为在获得结果之前需要很长时间。你能说什么? 你能给我一个很好的建议吗?感谢
答案 0 :(得分:2)
您所做的是我能想到的与条件和代码可维护性相关的最佳方式。
SELECT id, fullname
FROM users
WHERE id NOT IN (SELECT user_id FROM group_members WHERE group_id = $groupId)
AND fullname LIKE $serchKey
但是有一种使用LEFT JOIN
的替代方案可以论证性能。 (我没有检查过这个SQL,请在你的数据库中查看)
SELECT distinct u.id
FROM users u
LEFT JOIN group_members gm
ON u.id = gm.user_id
WHERE gm.user_id IS NULL
AND u.fullname like $serchkey