使用IS NULL vs NOT IN

时间:2014-10-23 20:49:53

标签: mysql

我有三个表,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);

2 个答案:

答案 0 :(得分:3)

使用explain select ...运行它们以查看哪些运行速度更快。它实际上取决于表中的数据量。 IN子句用很多数据执行得比较慢。

答案 1 :(得分:1)

您的第一个查询将执行一次连接,然后只需过滤任何为null的查询。您的第二个查询执行子查询,然后针对user_role中的每个用户检查用户的每个用户。有时您需要根据表的结构执行子查询,但对于像这样简单的事情,我会选择第一个。

相关问题