我有三个表,user,role和user_role。
我有一个查询来查找没有分配角色的用户。我想知道以下哪个查询更有效,如果有的话:
select * from user u left join user_role ur on u.id = ur.user_id where ur.user_id is null
VS
select * from user u where u.id not in (select user_id from user_role);
答案 0 :(得分:3)
使用explain select ...
运行它们以查看哪些运行速度更快。它实际上取决于表中的数据量。 IN
子句用很多数据执行得比较慢。
答案 1 :(得分:1)
您的第一个查询将执行一次连接,然后只需过滤任何为null的查询。您的第二个查询执行子查询,然后针对user_role中的每个用户检查用户的每个用户。有时您需要根据表的结构执行子查询,但对于像这样简单的事情,我会选择第一个。