Rendimiento · migraciones de esquema

ALTER TABLE en tablas grandes

Aprende a distinguir cambios de metadatos, validaciones y reescrituras antes de modificar una tabla con datos reales.

Lectura: 6–8 minComparativa por motorPlan de migración
Contenido de esta guía

Por qué el tamaño no basta para estimar el riesgo

Dos sentencias ALTER TABLE sobre la misma tabla pueden tener costes muy distintos. Una puede cambiar solo metadatos; otra puede leer todas las filas, reescribir la tabla, reconstruir índices o impedir temporalmente escrituras.

Antes de desplegar, identifica tres cosas: el trabajo físico que realiza el motor, el bloqueo que necesita y la duración durante la que una versión antigua de la aplicación convivirá con el nuevo esquema.

Tres clases de coste

ClaseQué puede ocurrirEjemplos posibles
MetadatosCambia el catálogo sin recorrer todas las filasAñadir ciertas columnas o cambiar un valor predeterminado
ValidaciónLee filas para comprobar una reglaAñadir CHECK o NOT NULL
Reescritura o copiaTransforma y vuelve a guardar datosCambiar algunos tipos, eliminar columnas o reordenarlas

La clase exacta depende del motor, la versión, el tipo de columna, los valores predeterminados, las restricciones, los índices y la configuración.

Ejemplo: añadir un canal a pedidos

Cambio sencillo de esquema
ALTER TABLE pedidos
ADD COLUMN canal VARCHAR(20);

Añadir primero una columna que admite NULL suele facilitar la compatibilidad. La aplicación puede empezar a escribir el nuevo dato sin obligar a completar todas las filas antiguas durante el mismo despliegue.

No concluyas que la operación será instantánea solo por su aspecto. Pide al motor el algoritmo o plan disponible, prueba con una copia representativa y mide bloqueos, espacio temporal y duración.

Qué documenta cada motor

  • PostgreSQL actual: añadir una columna con un valor predeterminado constante puede evitar actualizar cada fila en ese momento; un valor predeterminado volátil sí puede exigir completar todas las filas. Cambiar tipos y validar reglas puede requerir más trabajo.
  • MySQL 8.4 con InnoDB: INSTANT es el algoritmo predeterminado cuando la operación lo admite. Cambiar el tipo de una columna se documenta como una operación que necesita COPY, mientras que ciertas ampliaciones de VARCHAR pueden realizarse en el lugar.
  • SQLite actual: renombrar una tabla o columna y añadir una columna sin restricciones que deban comprobarse puede ser independiente del número de filas. Desde SQLite 3.53.0 también existe ALTER COLUMN ... SET/DROP NOT NULL; establecer NOT NULL debe comprobar los datos existentes. Operaciones que validan restricciones o eliminan una columna pueden recorrer o reescribir el contenido, por lo que su coste crece con la tabla.
  • SQL Server: las operaciones y opciones dependen de la edición y del objeto; un cambio de columna puede bloquear y algunas operaciones ofrecen variantes en línea o reanudables.

Plan de migración por fases

  1. Medir: tamaño, ritmo de escrituras, índices y dependencias.
  2. Ensayar: copia con volumen y distribución similares.
  3. Expandir: añadir una estructura compatible con ambas versiones de la aplicación.
  4. Completar: migrar datos en lotes observables cuando sea necesario.
  5. Restringir: validar y añadir reglas finales después.
  6. Retirar: eliminar columnas antiguas en otro despliegue.

Errores frecuentes

Probar solo con una tabla vacía

Una sentencia que tarda milisegundos sin filas no representa una tabla grande ni concurrida. También es peligroso agrupar varios cambios: el motor puede aplicar el algoritmo más costoso del conjunto y prolongar el bloqueo.

No uses una estimación genérica como garantía. Registra la versión del motor, la sentencia exacta, el volumen y el resultado del ensayo.

Comprueba lo aprendido

Avanzada · planificación

Planifica una referencia externa obligatoria

Una tabla pedidos con millones de filas debe incorporar referencia_externa, que terminará siendo única y obligatoria. Describe el orden de despliegue sin bloquear toda la migración en una sola sentencia.

Comprobaciones antes de producción

  • Algoritmo real elegido y posibilidad de forzarlo o rechazar alternativas.
  • Tipo y duración de bloqueos.
  • Espacio adicional para copias, índices y registros.
  • Impacto sobre réplicas, copias de seguridad y recuperación.
  • Consulta de cancelación y plan de reversión.
  • Métricas que indican continuar o abortar.

Qué debes recordar

  • El coste lo determina la operación concreta, no solo el tamaño.
  • Metadatos, validación y reescritura son trabajos distintos.
  • Las capacidades cambian entre motores y versiones.
  • Ensaya con datos representativos y despliega por fases.

Conceptos relacionados

Fuentes técnicas consultadas