使用列表和左连接之间的区别

时间:2009-07-10 06:59:03

标签: php sql mysql optimization

我有两个具有以下结构的数据库表:

动作:

action_id   int(11) primary key
action_name     varchar(255)
action_module   varchar(45)

权限:

perm_id     int(11) primary key
perm_role   int(11) 
perm_action     int(11)
perm_status     int(11)

现在,我必须通过输入以下数据来检查权限表中给定角色的权限表中是否有条目:perm_role,action_name和action_module。

我准备了两个查询来验证上述情况,但我没有任何线索哪个更好。有人可以指导我如何找到最好的一个:

查询1

SELECT perm_id FROM permissions 
LEFT JOIN actions ON action_id=perm_action 
WHERE perm_role=1 AND action_name='add' AND action_module='employee';

查询2:

SELECT perm_id FROM permissions, actions 
WHERE perm_role=1 AND perm_action=action_id AND action_name='add' 
AND action_module='employee';

我需要优化这些查询,因为必须在每次向服务器发出请求时执行这些查询。开发环境是PHP-5.2.10和MySQL-5.1.35

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

查询1更好,因为如果你不使用join,那么sql使用它自己的提示进行联合 这段时间不好,可能需要时间才能给你结果。 并且在关节中首先使用更多的行表,它们将更快地工作并且在'='的位置使用,这将更快地工作。过滤顺序也很重要。

我建议另一件事是使用actionname并从action表中获取actionid 然后在权限表的搜索条件中使用id

答案 2 :(得分:0)

我会选择第一个:表格之间的关系在那个版本中更加清晰。我甚至不确定第二个是否正确。至于速度:查询查询或只是查询时间。

关于第二个查询的附注:可能INNER JOIN就足够了。