feat: Add database indexes

This commit is contained in:
gpt-engineer-app[bot]
2025-11-03 14:58:12 +00:00
parent ee09e3652c
commit 5612d19d07
3 changed files with 576 additions and 50 deletions

View File

@@ -0,0 +1,94 @@
-- P0 #7: Performance Optimization - Database Indexes
-- Creates indexes on confirmed high-frequency tables only
-- Focuses on moderation queue performance (most critical)
-- ============================================================================
-- CONTENT SUBMISSIONS (CRITICAL - Moderation Queue Performance)
-- ============================================================================
-- Moderation queue sorting (most critical for performance)
CREATE INDEX IF NOT EXISTS idx_submissions_queue
ON content_submissions(status, created_at DESC)
WHERE status IN ('pending', 'flagged');
-- Lock management queries
CREATE INDEX IF NOT EXISTS idx_submissions_locks
ON content_submissions(assigned_to, locked_until)
WHERE locked_until IS NOT NULL;
-- Moderator workload queries
CREATE INDEX IF NOT EXISTS idx_submissions_reviewer
ON content_submissions(reviewer_id, status, reviewed_at DESC)
WHERE reviewer_id IS NOT NULL;
-- Submission type filtering
CREATE INDEX IF NOT EXISTS idx_submissions_type_status
ON content_submissions(submission_type, status, created_at DESC);
-- User submissions lookup
CREATE INDEX IF NOT EXISTS idx_submissions_user
ON content_submissions(user_id, created_at DESC);
-- ============================================================================
-- SUBMISSION ITEMS (Dependency Resolution)
-- ============================================================================
-- Submission item lookups and status tracking
CREATE INDEX IF NOT EXISTS idx_submission_items_submission
ON submission_items(submission_id, status, order_index);
-- Dependency chain resolution
CREATE INDEX IF NOT EXISTS idx_submission_items_depends
ON submission_items(depends_on)
WHERE depends_on IS NOT NULL;
-- Item type filtering
CREATE INDEX IF NOT EXISTS idx_submission_items_type
ON submission_items(item_type, status);
-- ============================================================================
-- USER PROFILES (Profile Lookups)
-- ============================================================================
-- Username lookups (case-insensitive for search)
CREATE INDEX IF NOT EXISTS idx_profiles_username_lower
ON profiles(LOWER(username));
-- User ID lookup
CREATE INDEX IF NOT EXISTS idx_profiles_user_id
ON profiles(user_id);
-- ============================================================================
-- MODERATION AUDIT LOG (Admin Queries)
-- ============================================================================
-- Audit log by moderator
CREATE INDEX IF NOT EXISTS idx_audit_log_moderator
ON moderation_audit_log(moderator_id, created_at DESC);
-- Audit log by submission
CREATE INDEX IF NOT EXISTS idx_audit_log_submission
ON moderation_audit_log(submission_id, created_at DESC)
WHERE submission_id IS NOT NULL;
-- Audit log by action type
CREATE INDEX IF NOT EXISTS idx_audit_log_action
ON moderation_audit_log(action, created_at DESC);
-- ============================================================================
-- CONTACT SUBMISSIONS (Contact Form Performance)
-- ============================================================================
-- Contact queue sorting
CREATE INDEX IF NOT EXISTS idx_contact_status_created
ON contact_submissions(status, created_at DESC);
-- User contact history
CREATE INDEX IF NOT EXISTS idx_contact_user
ON contact_submissions(user_id, created_at DESC)
WHERE user_id IS NOT NULL;
-- Assigned tickets
CREATE INDEX IF NOT EXISTS idx_contact_assigned
ON contact_submissions(assigned_to, status)
WHERE assigned_to IS NOT NULL;