The world's most popular open source database
Importante: No se deben convertir las tablas del sistema en la base de
datos mysql (por ejemplo, user o
host) al tipo InnoDB. Las tablas
del sistema siempre deben ser del tipo MyISAM.
Si se desea que todas las tablas que no sean de sistema se creen como
tablas InnoDB, simplemente debe agregarse la línea
default-table-type=innodb a la sección
[mysqld] del fichero my.cnf
o my.ini.
InnoDB no posee una optimización especial para la
creación separada de índices en la misma forma que la tiene el motor de
almacenamiento MyISAM. Por lo tanto, no hay beneficio
en exportar e importar la tabla y crear los índices posteriormente. La
manera más rápida de cambiar una tabla al motor
InnoDB es hacer las inserciones directamente en una
tabla InnoDB. Es decir, utilizar ALTER
TABLE ... ENGINE=INNODB, o crear una tabla
InnoDB vacía con idénticas definiciones e insertar
las filas con INSERT INTO ... SELECT * FROM
....
Si se tienen restricciones UNIQUE sobre claves
secundarias, se puede acelerar la importación de una tabla desactivando
temporalmente la verificación de unicidad durante la sesión de
importación: SET UNIQUE_CHECKS=0;. Para tablas
grandes, esto ahorra gran cantidad de operaciones de E/S en disco, debido
a que InnoDB puede emplear su buffer de inserciones
para grabar registros de índices secundarios en lote.
Para obtener un mejor control sobre el proceso de inserción, podría ser mejor llenar la tablas grandes por partes:
INSERT INTO nuevatabla SELECT * FROM viejatabla WHERE clave > valor1 AND clave <= valor2;
Luego de que todos los registros se hayan insertado, se pueden renombrar las tablas.
Durante la conversión de tablas grandes, se puede reducir la cantidad de
operaciones de E/S en disco incrementando el tamaño del pool de buffer
de InnoDB. No debe usarse más del 80% de la memoria
física. También pueden aumentarse los tamaños de los ficheros de
registro (log) de InnoDB.
Hay que asegurarse de no llenar completamente el espacio de tablas: las
tablas InnoDB necesitan mucho más espacio que las
tablas MyISAM. Si una sentencia ALTER
TABLE se queda sin espacio, realizará una cancelación
(rollback), y esto puede tomar horas si lo hace sobre el disco. Para
las inserciones, InnoDB emplea el buffer de inserción
para combinar en lotes los registros secundarios de índices con los
índices. Esto ahorra gran cantidad de operaciones de E/S en disco.
Durante la cancelación no se emplea ese mecanismo, de modo que puede
llevar más de 30 veces el tiempo insumido por la inserción.
Si se produjera una de estas cancelaciones fuera de control, sino se tienen datos valiosos en la base de datos, puede ser preferible matar el proceso de la base de datos en lugar de esperar que se completen millones de operaciones de E/S en disco. Para el procedimiento completo, consulte Sección 15.8.1, “Forzar una recuperación”.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

