Sql server 优化大型SQL实体权限查询
在下面的场景中,我碰巧遇到了一点性能问题。我提供的示例大大简化了,但提供了理解问题所需的足够洞察力,并可能帮助我解决问题 假设我有一个大型MSSQL db,其中包含以下表格:Sql server 优化大型SQL实体权限查询,sql-server,tsql,optimization,permissions,Sql Server,Tsql,Optimization,Permissions,在下面的场景中,我碰巧遇到了一点性能问题。我提供的示例大大简化了,但提供了理解问题所需的足够洞察力,并可能帮助我解决问题 假设我有一个大型MSSQL db,其中包含以下表格: 部门 团队 项目 公司 用户 然后我有5个名为{Entity}Permission的表,它们将这些表与文档表(n:m)以及整数权限位标志链接在一起: 1=读取2=写入4=创建8=删除16=修改权限 *例如:* DepartmentPermission: DocumentID | DepartmentID | Permi
- 部门
- 团队
- 项目
- 公司
- 用户
DepartmentPermission:
DocumentID | DepartmentID | PermissionFlagAllow | PermissionFlagDeny
15 | 1 | 1|2|4|8 | NULL
CompanyPermission:
DocumentID | CompanyID | PermissionFlagAllow | PermissionFlagDeny
15 | 8 | 1|2 | NULL
UserPermission:
DocumentID | UserID | PermissionFlagAllow | PermissionFlagDeny
15 | 48 | 1|2 | 4|8
……等等
现在,用户需要显示他们拥有特定权限的所有文档,或者这些文档属于他们的公司、部门、团队或项目。如何在不破坏服务器的情况下,通过一个充满左外部联接和OR的巨大查询来实现这一点?是否值得创建另一个存储一些预计算数据的表
编辑:还有一些继承涉及公司>部门>团队>项目。PermissionFlagDeny标志允许进行微调,例如“除了清洁女工和自助餐厅员工之外,整个IT公司都可以访问这些IT文档。”每个表有多少条记录?依我看,我会为每个用户存储预计算的值(包括从组织链派生的权限),但这对于大型组织链来说是个问题。@Alex 3000多家公司,每个公司约10个部门。。然后,对于团队和项目,每个公司有2个平均值,有些客户不深入,只使用部门。然而,documents表是巨大的,目前有200+k个条目。旧的连接查询方法直到最近才开始工作,随着文档表的持续增长,系统现在的速度呈指数级下降。您应该尝试将此发布到。为避免双重过帐问题,请确保包含指向原始SO问题的链接。您是否有可以过帐以供审阅的联接查询?每个表有多少条记录?依我看,我会为每个用户存储预计算的值(包括从组织链派生的权限),但这对于大型组织链来说是个问题。@Alex 3000多家公司,每个公司约10个部门。。然后,对于团队和项目,每个公司有2个平均值,有些客户不深入,只使用部门。然而,documents表是巨大的,目前有200+k个条目。旧的连接查询方法直到最近才开始工作,随着文档表的持续增长,系统现在的速度呈指数级下降。您应该尝试将此发布到。为避免重复发布问题,请确保包含指向原始SO问题的链接。您是否有可以发布以供审阅的加入查询?