我怎样才能在mysql中做更好的查询

时间:2015-02-25 04:48:07

标签: mysql

我想搜索不在特定组中的用户。 我在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)我认为在获得结果之前需要很长时间。你能说什么? 你能给我一个很好的建议吗?感谢

1 个答案:

答案 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