-- =============================================================================
-- OC y Clasificación — 5: índice de `documentos` por OC
-- Base: asercolg_po (conexión `mysql`) · MariaDB 11.8
-- =============================================================================
--
-- El formulario de la OC V2 busca el documento adjunto por `id_po`. La tabla
-- no tiene índice por esa columna y guarda textos largos (2,2 GB en 3.595
-- filas, medido el 29/10): abrir una OC de Tenaris tardaba ~11 s solo en esa
-- consulta. El código ya pide solo las columnas que usa; el índice evita
-- además recorrer las filas del grupo.
--
-- También lo aprovechan las consultas de documentos por OC de
-- DocumentosController y ActividadController (JOIN documentos ON id_po).
--
-- CLAUDE.md §3: lo aplica el DBA a mano. Es idempotente.
--
-- ⚠ `documentos` es MyISAM (verificado el 29/10): no admite crear el índice en
--   línea (ALGORITHM=INPLACE da el error 1845). Con COPY la tabla se copia
--   entera (2,2 GB, unos minutos); mientras dura se puede leer pero no
--   escribir (LOCK=SHARED): subir o guardar documentos espera. Correrlo fuera
--   del horario de carga.
--
-- =============================================================================
-- PASO 0 — Estado antes
-- =============================================================================

SHOW INDEX FROM `documentos`;

-- =============================================================================
-- PASO 1 — Índice
-- =============================================================================

SET @existe = (SELECT COUNT(*)
                 FROM information_schema.STATISTICS
                WHERE TABLE_SCHEMA = DATABASE()
                  AND TABLE_NAME = 'documentos'
                  AND INDEX_NAME = 'ix_documentos_po');

SET @sql = IF(@existe > 0,
              'SELECT ''ix_documentos_po ya existe'' AS aviso',
              'ALTER TABLE `documentos` ADD INDEX `ix_documentos_po` (`id_po`, `id_grupo_empresarial`, `modo`), ALGORITHM=COPY, LOCK=SHARED');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

-- =============================================================================
-- PASO 2 — Verificación
-- =============================================================================

SELECT INDEX_NAME, GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS columnas
  FROM information_schema.STATISTICS
 WHERE TABLE_SCHEMA = DATABASE()
   AND TABLE_NAME = 'documentos'
   AND INDEX_NAME = 'ix_documentos_po'
 GROUP BY INDEX_NAME;
-- Esperado: ix_documentos_po · id_po,id_grupo_empresarial,modo

-- Para revertir:
--   ALTER TABLE `documentos` DROP INDEX `ix_documentos_po`;
