-- Migración 0009 — índices para queries frecuentes -- -- Cubre 3 hot paths detectados en la auditoría: -- -- 1) ORDER BY fecha_solicitud DESC — usado en admin/index, mis-prestamos, -- estadisticas, reportes. Sin índice, a >5k filas Postgres hace sort en -- memoria en cada request. -- -- 2) "Vencidos": estado IN ('aprobado','activo') AND fecha_devolucion_estimada < today. -- Índice parcial: solo indexa filas activas (10-100 filas típicas), evita -- inflar el índice con solicitudes ya devueltas/rechazadas. -- -- 3) audit_log filtrado por estado_nuevo + rango de at (estadisticas del día). -- El compuesto acelera los 3 counts diarios (aprobadas/rechazadas/devueltas). -- -- Todos idempotentes vía IF NOT EXISTS. begin; create index if not exists solicitudes_fecha_idx on prestamos.solicitudes (fecha_solicitud desc); create index if not exists solicitudes_vencidos_idx on prestamos.solicitudes (fecha_devolucion_estimada) where estado in ('aprobado', 'activo'); create index if not exists audit_estado_at_idx on prestamos.audit_log (estado_nuevo, at desc); commit;