2012-06-12 9 views
8

Quiero ejecutar esto en mi mesa:Alteración del tipo de datos de una columna en una tabla ENORME. Rendimiento emite

ALTER TABLE table_name MODIFY col_name VARCHAR(255) 

Pero mi mesa es enorme, que tiene más de 65 millones (65 millones) filas. Ahora cuando lo ejecuto, toma casi 50 minutos ejecutar este comando. ¿Alguna mejor forma de alterar la mesa?

+4

No, que va a ser lento. Una declaración ALTER es una acción de una vez. Espera y espera que no necesites hacerlo de nuevo. –

+3

Enorme tabla? no. ¿Muy grande? sí. –

Respuesta

3

Bueno, necesita

ALTER TABLE table_name CHANGE col_name new_name VARCHAR(255) 

Pero, usted tiene razón, se necesita un tiempo para hacer el cambio. Realmente no hay una forma más rápida de cambiar la tabla en MySQL.

¿Es su preocupación el tiempo de inactividad durante el cambio? Si es así, este es un enfoque posible: copie la tabla en una nueva, luego cambie el nombre de la columna en la copia y luego cambie el nombre de la copia.

Probablemente haya descubierto que el cambio rutinario de nombres de columna en tablas en un sistema de producción no es una buena idea.

+0

Sí. No puedo permitirme tener un tiempo de inactividad de 50 minutos, ya que todas las filas estarán bloqueadas durante esto, lo que evitará otras acciones (CRUD) en esta tabla. – Kiran

+0

Uh. Oh. Esto significa que, si copia la tabla, aparecerán filas nuevas y modificadas en la tabla anterior mientras reorganiza la nueva. Si este fuera mi proyecto, ahora intentaría decidir qué tan importante es cambiar este nombre de columna. –

+0

sí. Puedo hacer una cosa. Anuncie el tiempo de inactividad de 1 hora y haga que esto cambie cuando la carga sea menor. Probablemente a la medianoche. Sin embargo, gracias por tus entradas. – Kiran

0

Puede ocuparse del cambio de esquema sin tiempo de inactividad usando Oak.

oak-online-alter-table copia el esquema de la tabla original, aplica los cambios y luego copia los datos. Las operaciones CRUD todavía se pueden invocar ya que oak pone algunos disparadores en la tabla original para que no se pierdan datos durante la operación.

Por favor, consulte other question donde autor de roble da una explicación detallada acerca de este mecanismo y también sugiere otras herramientas.

Cuestiones relacionadas