我有两个具有以下结构的数据库表:
动作:
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
答案 0 :(得分:2)
答案 1 :(得分:0)
查询1更好,因为如果你不使用join,那么sql使用它自己的提示进行联合 这段时间不好,可能需要时间才能给你结果。 并且在关节中首先使用更多的行表,它们将更快地工作并且在'='的位置使用,这将更快地工作。过滤顺序也很重要。
我建议另一件事是使用actionname并从action表中获取actionid 然后在权限表的搜索条件中使用id
答案 2 :(得分:0)
我会选择第一个:表格之间的关系在那个版本中更加清晰。我甚至不确定第二个是否正确。至于速度:查询查询或只是查询时间。
关于第二个查询的附注:可能INNER JOIN就足够了。