Optimize RBAC org tree loading
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
-- ============================================================================
|
||||
-- sso_users 组织树查询索引补丁
|
||||
-- 用途:
|
||||
-- 1. 优化 /api/admin/users/organizations/tree 的分层懒加载查询
|
||||
-- 2. 重点覆盖 tenant / dep / org / ou_id 四类过滤路径
|
||||
-- 注意:
|
||||
-- 1. 该脚本适合已存在 sso_users 表的环境增量执行
|
||||
-- 2. 如果正式库较大,建议低峰执行;如需 CREATE INDEX CONCURRENTLY,请拆成单条执行
|
||||
-- ============================================================================
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- 根节点:按地区 + 有效用户状态枚举租户
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_area_tenant
|
||||
ON sso_users(status, deleted_at, area, tenant_name);
|
||||
|
||||
-- 租户节点:按地区 / 租户 枚举部门,兼容 dep_name / dep_short_name
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_tenant_dep_expr
|
||||
ON sso_users(status, deleted_at, tenant_name, (COALESCE(dep_name, dep_short_name, '')));
|
||||
|
||||
-- 部门节点:按租户 + 部门 枚举组织
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_tenant_dep_ou_name
|
||||
ON sso_users(status, deleted_at, tenant_name, (COALESCE(dep_name, dep_short_name, '')), ou_name);
|
||||
|
||||
-- 叶子节点:按地区快速命中组织名称 / 组织ID
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_area_ou_name
|
||||
ON sso_users(status, deleted_at, area, ou_name);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_area_ou_id
|
||||
ON sso_users(status, deleted_at, area, ou_id);
|
||||
|
||||
-- 部门展开时若只按 area + department 过滤,也给表达式索引
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_area_dep_expr
|
||||
ON sso_users(status, deleted_at, area, (COALESCE(dep_name, dep_short_name, '')));
|
||||
|
||||
COMMIT;
|
||||
@@ -50,6 +50,18 @@ CREATE INDEX IF NOT EXISTS idx_sso_users_ou_id ON sso_users(ou_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_is_leader ON sso_users(is_leader);
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_mq_person ON sso_users(mq_person_uuid);
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_mq_account ON sso_users(mq_account_uuid);
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_area_tenant
|
||||
ON sso_users(status, deleted_at, area, tenant_name);
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_area_dep_expr
|
||||
ON sso_users(status, deleted_at, area, (COALESCE(dep_name, dep_short_name, '')));
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_area_ou_name
|
||||
ON sso_users(status, deleted_at, area, ou_name);
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_area_ou_id
|
||||
ON sso_users(status, deleted_at, area, ou_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_tenant_dep_expr
|
||||
ON sso_users(status, deleted_at, tenant_name, (COALESCE(dep_name, dep_short_name, '')));
|
||||
CREATE INDEX IF NOT EXISTS idx_sso_users_active_tenant_dep_ou_name
|
||||
ON sso_users(status, deleted_at, tenant_name, (COALESCE(dep_name, dep_short_name, '')), ou_name);
|
||||
|
||||
COMMENT ON TABLE sso_users IS '用户主表:认证身份、组织信息、地区隔离基础字段统一沉淀在这里';
|
||||
COMMENT ON COLUMN sso_users.sub IS '统一身份唯一标识,OAuth / SSO 主键';
|
||||
|
||||
Reference in New Issue
Block a user