37 lines
1.7 KiB
PL/PgSQL
37 lines
1.7 KiB
PL/PgSQL
-- ============================================================================
|
|
-- 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;
|