Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 优化大型SQL实体权限查询_Sql Server_Tsql_Optimization_Permissions - Fatal编程技术网

Sql server 优化大型SQL实体权限查询

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

在下面的场景中,我碰巧遇到了一点性能问题。我提供的示例大大简化了,但提供了理解问题所需的足够洞察力,并可能帮助我解决问题

假设我有一个大型MSSQL db,其中包含以下表格:

  • 部门
  • 团队
  • 项目
  • 公司
  • 用户
然后我有5个名为{Entity}Permission的表,它们将这些表与文档表(n:m)以及整数权限位标志链接在一起:

1=读取2=写入4=创建8=删除16=修改权限

*例如:*

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问题的链接。您是否有可以发布以供审阅的加入查询?