-- ============================================ -- SAAS-022: Goals Indexes -- Performance optimization -- ============================================ -- ───────────────────────────────────────────── -- Definitions Indexes -- ───────────────────────────────────────────── -- Tenant + status (most common query) CREATE INDEX idx_definitions_tenant_status ON goals.definitions (tenant_id, status); -- Period queries CREATE INDEX idx_definitions_tenant_period ON goals.definitions (tenant_id, period, starts_at, ends_at); -- Date range queries CREATE INDEX idx_definitions_dates ON goals.definitions (starts_at, ends_at); -- Category filtering CREATE INDEX idx_definitions_category ON goals.definitions (tenant_id, category) WHERE category IS NOT NULL; -- Active goals (partial index) CREATE INDEX idx_definitions_active ON goals.definitions (tenant_id, starts_at, ends_at) WHERE status = 'active'; -- Created by user CREATE INDEX idx_definitions_created_by ON goals.definitions (created_by) WHERE created_by IS NOT NULL; -- Tags (GIN for JSONB array) CREATE INDEX idx_definitions_tags ON goals.definitions USING GIN (tags); -- ───────────────────────────────────────────── -- Assignments Indexes -- ───────────────────────────────────────────── -- Tenant + status (most common query) CREATE INDEX idx_assignments_tenant_status ON goals.assignments (tenant_id, status); -- Definition lookup CREATE INDEX idx_assignments_definition ON goals.assignments (definition_id); -- User assignments (most common filter) CREATE INDEX idx_assignments_user ON goals.assignments (user_id, status) WHERE user_id IS NOT NULL; -- Team assignments CREATE INDEX idx_assignments_team ON goals.assignments (team_id, status) WHERE team_id IS NOT NULL; -- Active assignments (partial index) CREATE INDEX idx_assignments_active ON goals.assignments (tenant_id, user_id) WHERE status = 'active'; -- Progress percentage (for reports) CREATE INDEX idx_assignments_progress ON goals.assignments (tenant_id, progress_percentage); -- Achieved goals CREATE INDEX idx_assignments_achieved ON goals.assignments (achieved_at) WHERE status = 'achieved'; -- ───────────────────────────────────────────── -- Progress Log Indexes -- ───────────────────────────────────────────── -- Assignment history CREATE INDEX idx_progress_log_assignment ON goals.progress_log (assignment_id, logged_at DESC); -- Tenant + date range CREATE INDEX idx_progress_log_tenant_date ON goals.progress_log (tenant_id, logged_at); -- Source reference (for deduplication) CREATE INDEX idx_progress_log_source_ref ON goals.progress_log (source_reference) WHERE source_reference IS NOT NULL; -- By user who logged CREATE INDEX idx_progress_log_logged_by ON goals.progress_log (logged_by) WHERE logged_by IS NOT NULL; -- ───────────────────────────────────────────── -- Milestone Notifications Indexes -- ───────────────────────────────────────────── -- Assignment milestones CREATE INDEX idx_milestone_notifications_assignment ON goals.milestone_notifications (assignment_id); -- Tenant notifications CREATE INDEX idx_milestone_notifications_tenant ON goals.milestone_notifications (tenant_id, notified_at);