一个表查询,INNER JOIN的,效率很差执行很慢,求助

bryan14 2010-12-20 04:31:40
涉及到5个表
SystemUser 用户表
SystemU2R 用户-角色关系
SystemRole 角色表
SystemR2P 角色权限关系
SystemPermission 权限表

查询结果: 寻找某用户所拥有的角色和权限


SELECT dbo.SystemUser.userID, dbo.SystemUser.userAccount, dbo.SystemRole.roleID, dbo.SystemRole.roleDesc, dbo.SystemPermission.permissionID,
dbo.SystemPermission.permissionDesc
FROM dbo.SystemUser INNER JOIN
dbo.SystemU2R ON dbo.SystemUser.userID = dbo.SystemU2R.userID INNER JOIN
dbo.SystemRole ON dbo.SystemU2R.roleID = dbo.SystemRole.roleID INNER JOIN
dbo.SystemR2P ON dbo.SystemRole.roleID = dbo.SystemR2P.roleID INNER JOIN
dbo.SystemPermission ON dbo.SystemR2P.permissionID = dbo.SystemPermission.permissionID
WHERE SystemUser.userID=10


执行结果:
...全文
2508 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bryan14 2010-12-20
  • 打赏
  • 举报
回复
嗯,感谢各位,添加了索引效率马上高多了
执行计划变成了:


王向飞 2010-12-20
  • 打赏
  • 举报
回复
SystemU2R SystemR2P的
userID加一个聚集索引
bryan14 2010-12-20
  • 打赏
  • 举报
回复
附执行计划表:

bryan14 2010-12-20
  • 打赏
  • 举报
回复

机器配置:

Windows XP 专业版 ( 32位 / SP3 / DirectX 9.0c )
英特尔 Pentium(奔腾) 双核 E2140 @ 1.60GHz
华硕 Lancaster8 ( 英特尔 945G - ICH7 Family )
1 GB ( 镁光 DDR2 667MHz )

同时开MS SQLSERVER2005、MyEclipse、Chrome浏览器7个标签页,2个IE6页面,QQ,APACHE服务,TOMCAT服务,360杀毒、安全卫士等
z812183667 2010-12-20
  • 打赏
  • 举报
回复
建议楼主多加一张表吧!用户权限表
给用户分配过权限后,直接把用户对应的权限直接放到用户权限表中,然后判断用户权限的时候,直接查询用户权限表,效率会更高点!
cutesun 2010-12-20
  • 打赏
  • 举报
回复
同意OrchidCat

看下执行计划里是不是有 XX扫描之类的 执行计划。。
飘零一叶 2010-12-20
  • 打赏
  • 举报
回复
在连接的个列上建立索引把
bryan14 2010-12-20
  • 打赏
  • 举报
回复
我估计是机器配置比较低,这个影响比较大,有的时候执行挺快,有的时候需要十几到20+秒
求分析下
Mr_Nice 2010-12-20
  • 打赏
  • 举报
回复
对应链接各ID是否都有索引?

另外 ctrl+L 看下执行计划

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧