-- ============================================
-- MEJORA DE PERFORMANCE: Agregar Índices
-- Fecha: 2026-01-21
-- Propósito: Optimizar queries frecuentes sin cambiar lógica de negocio
-- ============================================

-- IMPORTANTE: Estos índices NO cambian la lógica de negocio
-- Solo mejoran la velocidad de las consultas existentes

-- ============================================
-- VERIFICACIÓN PREVIA
-- ============================================
-- Ejecuta primero para ver índices existentes:
-- SHOW INDEX FROM lecturas_clie_mensual;
-- SHOW INDEX FROM boletas;
-- SHOW INDEX FROM deudas;
-- SHOW INDEX FROM clientes;

-- ============================================
-- ÍNDICES PARA LECTURAS
-- ============================================

-- Optimiza: Búsqueda de lecturas por fecha y cliente
-- Usado en: getSociosPendientesLectura, getLecturasMensuales
CREATE INDEX idx_lecturas_fecha_cliente 
  ON lecturas_clie_mensual(fecha_ingreso_lectura, id_cliente);

-- Optimiza: Búsqueda de lecturas pendientes de facturación
CREATE INDEX idx_lecturas_boleta_estado 
  ON lecturas_clie_mensual(id_boleta, estado_pago);

-- ============================================
-- ÍNDICES PARA BOLETAS
-- ============================================

-- Optimiza: Búsqueda de boletas por fecha de pago
-- Usado en: getBoletas, getBoletasBySector
CREATE INDEX idx_boletas_fecha_pagar 
  ON boletas(fecha_a_pagar);

-- Optimiza: Búsqueda de boletas por cliente y estado
-- Usado en: getBoletasPendientesCliente
CREATE INDEX idx_boletas_cliente_estado 
  ON boletas(id_cliente, estado_pago);

-- Optimiza: Búsqueda de boletas por estado de pago
CREATE INDEX idx_boletas_estado_pago 
  ON boletas(estado_pago);

-- ============================================
-- ÍNDICES PARA DEUDAS
-- ============================================

-- Optimiza: Búsqueda de deudas por cliente y estado
-- Usado en: getDeudas, getResumenDeudas, getBoletasPendientesCliente
CREATE INDEX idx_deudas_cliente_estado 
  ON deudas(Id_cliente, estado_deuda);

-- Optimiza: Búsqueda de deudas por boleta
CREATE INDEX idx_deudas_boleta 
  ON deudas(Id_boleta);

-- Optimiza: Ordenamiento por fecha en reportes
CREATE INDEX idx_deudas_fecha 
  ON deudas(fecha);

-- ============================================
-- ÍNDICES PARA CLIENTES
-- ============================================

-- Optimiza: Búsqueda de clientes por sector y estado
-- Usado en: getClientes, getClientesBySector, getClientesParaCorte
CREATE INDEX idx_clientes_sector_estado 
  ON clientes(sector, estado_socio);

-- Optimiza: Búsqueda por RUT (búsquedas de clientes)
CREATE INDEX idx_clientes_rut 
  ON clientes(rut_cliente);

-- ============================================
-- ÍNDICES PARA PAGOS
-- ============================================

-- Optimiza: Búsqueda de pagos por fecha
-- Usado en: getPagosSocios, getPagosDelDia
CREATE INDEX idx_pagos_fecha 
  ON pagos_socios(fecha_pago);

-- Optimiza: Búsqueda de pagos por cliente
CREATE INDEX idx_pagos_cliente 
  ON pagos_socios(Id_cliente);

-- ============================================
-- ÍNDICES PARA SUBSIDIOS Y REPACTACIONES
-- ============================================

-- Optimiza: Búsqueda de subsidios activos por cliente
CREATE INDEX idx_subsidios_cliente_activo 
  ON subsidios(Id_cliente, activo);

-- Optimiza: Búsqueda de repactaciones por cliente y estado
CREATE INDEX idx_repactaciones_cliente_estado 
  ON repactaciones(Id_cliente, estado_repactacion);

-- ============================================
-- ÍNDICES PARA REPOSICIONES
-- ============================================

-- Optimiza: Búsqueda de reposiciones por cliente y estado
CREATE INDEX idx_reposiciones_cliente_estado 
  ON reposiciones(Id_cliente, estado);

-- ============================================
-- VERIFICACIÓN POST-IMPLEMENTACIÓN
-- ============================================
-- Ejecuta después para verificar que se crearon:
-- SHOW INDEX FROM lecturas_clie_mensual;
-- SHOW INDEX FROM boletas;
-- SHOW INDEX FROM deudas;
-- SHOW INDEX FROM clientes;
-- SHOW INDEX FROM pagos_socios;
-- SHOW INDEX FROM subsidios;
-- SHOW INDEX FROM repactaciones;
-- SHOW INDEX FROM reposiciones;

-- ============================================
-- NOTAS IMPORTANTES
-- ============================================
-- 1. Estos índices NO cambian la lógica de negocio
-- 2. Solo mejoran la velocidad de las consultas
-- 3. Pueden hacer que INSERT/UPDATE sean ligeramente más lentos (1-2%)
-- 4. El beneficio en SELECT es mucho mayor (50-80% más rápido)
-- 5. MySQL 5.6 soporta CREATE INDEX IF NOT EXISTS
-- 6. Es seguro ejecutar este script múltiples veces

-- ============================================
-- ROLLBACK (si es necesario)
-- ============================================
-- Si necesitas eliminar los índices:
/*
DROP INDEX idx_lecturas_fecha_cliente ON lecturas_clie_mensual;
DROP INDEX idx_lecturas_boleta_estado ON lecturas_clie_mensual;
DROP INDEX idx_boletas_fecha_pagar ON boletas;
DROP INDEX idx_boletas_cliente_estado ON boletas;
DROP INDEX idx_boletas_estado_pago ON boletas;
DROP INDEX idx_deudas_cliente_estado ON deudas;
DROP INDEX idx_deudas_boleta ON deudas;
DROP INDEX idx_deudas_fecha ON deudas;
DROP INDEX idx_clientes_sector_estado ON clientes;
DROP INDEX idx_clientes_rut ON clientes;
DROP INDEX idx_pagos_fecha ON pagos_socios;
DROP INDEX idx_pagos_cliente ON pagos_socios;
DROP INDEX idx_subsidios_cliente_activo ON subsidios;
DROP INDEX idx_repactaciones_cliente_estado ON repactaciones;
DROP INDEX idx_reposiciones_cliente_estado ON reposiciones;
*/
