求教个rbac联合查询效率的问题

hphper 发布于 2014/03/31 21:23
阅读 146
收藏 0

我有如下5张表

users表

roles表

user_role表

permissions表

role_perm表

比如我想查询 用户名为admin的用户名的角色和权限

下面哪个效率高

sql1:


select u.u_name,ur.role_id,r.role_name,rp.perm_id,perm_name from users as u join user_role as ur
on u.u_id=ur.u_id
join roles as r
on r.role_id=ur.u_id 
join role_perm as rp
on rp.role_id=ur.role_id
join permissions as p
on p.perm_id=rp.perm_id
where u_name='admin';




上面好像是先连接所有的,然后再在连接的结果里筛选

sql2:

select u_name,r.role_name,p.perm_name from 
(select u_name ,u_id from users where u_name='admin' ) as u
left join user_role as ur
on ur.u_id=u.u_id
join roles as r
on r.role_id=ur.role_id
join role_perm as rp
on rp.role_id=r.role_id
join permissions as p
on p.perm_id=rp.perm_id;



对于sql1怎么能让他在连接时加上u_name='admin'啊,让这个条件在做笛卡尔集时就起作用而不是在在做完笛卡尔积的结果里筛选,sql1和sql2哪个好些,还有更好的不?




加载中
0
hphper
hphper

咋没人(⊙o⊙)?

0
loyal
loyal

启动的时候就都加载到cache里了...

hphper
hphper
回复 @loyal : 怎么做啊,求给个大致思路
loyal
loyal
回复 @hphper : 我说.的是...你应该那么做.
hphper
hphper
什么启动,哪里有cache呀?
0
大喵哥
大喵哥

个人感觉效率应该差不多吧

返回顶部
顶部