当前位置: 代码迷 >> Sql Server >> sql 子查询优化 权限管理的解决思路
  详细解决方案

sql 子查询优化 权限管理的解决思路

热度:31   发布时间:2016-04-24 09:41:02.0
sql 子查询优化 权限管理的

select MenuText 
from mainmenu
 where PermissionID in
(
      select distinct PermissionID from Role_Permission where RoleID in 
      (
             select  RoleID from User_Roles where userid =
             (
                select id from users where userpkno=10
            )
      )
)


请前辈教我优化一下这个查询,我只会这些简单的子查询,谢谢,分不多,想多问些问题,呵呵!
------解决思路----------------------
不用in,可以用exist。另外,这三张表的引用关系是什么?
user --用户表
User_Roles --用户角色表
Role_Permission --用户权限
     
------解决思路----------------------
select MenuText  from mainmenu a
  where exists
(select * from Role_Permission b,User_Roles c,users d 
  where a.PermissionID=b.PermissionID and b.RoleID=c.RoleID and c.userid=d.userid and d.userpkno=10)
------解决思路----------------------
甚至exists 都可以不用,直接将这四个表连接其他,最后用userpkno=10这个条件筛选
------解决思路----------------------
引用:
Quote: 引用:

甚至exists 都可以不用,直接将这四个表连接其他,最后用userpkno=10这个条件筛选

连接这么多表,效率也不高吧,我不懂啊

效率高低与连接表的数量不明显,如果多表连接效率低,需要看看执行计划,然后需要看看怎么办。
根据经验,这四个表的数据应该不多,连接查询不会慢
  相关解决方案