-- ============================================================================
-- 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;
