Una situación común en una aplicación de bases de datos es que la clave primaria sea un identificador único y las nuevas filas se inserten en el orden ascendente de esta clave. Por lo tanto, las inserciones en el índice agrupado no necesitan lecturas del disco aleatorias.
Por el otro lado, los índices secundarios generalmente no son
únicos, y las inserciones en los mismos ocurren en un orden
relativamente aleatorio. Esto podría ocasionar gran cantidad de
operaciones de E/S en disco, de no ser por un mecanismo especial
utilizado en InnoDB
.
Si una entrada de índice debiera insertarse en un índice
secundario no único, InnoDB
verifica si la
página del índice secundario se encuentra en el pool de
buffer. Si ese es el caso, InnoDB
realizará
la inserción directamente en la página de índice. Si dicha
página no se encuentra en el pool de buffer,
InnoDB
insertará la entrada en una
estructura de buffer de inserciones especial. El buffer de
inserciones se mantiene tan pequeño que cabe completamente en
el pool de buffer, y las inserciones pueden hacerse muy
rápidamente.
Periódicamente, el buffer de inserciones se integra a los árboles de índices secundarios de la base de datos. A menudo es posible integrar varias inserciones en la misma página del árbol de índices, ahorrando operaciones de E/S en disco. Se ha comprobado que el buffer de inserciones puede acelerar hasta 15 veces las inserciones en una tabla.
La integración del buffer de inserciones puede continuar luego de que la transacción que realiza la inserción ha sido confirmada. De hecho, puede continuar despues de que el servidor ha sido detenido y vuelto a iniciar (consulte Sección 15.8.1, “Forzar una recuperación”).
La integración del buffer de inserciones puede tomar muchas horas, cuando hay varios índices secundarios para actualizar y gran cantidad de filas insertadas. Durante este tiempo, las operaciones de E/S en disco se incrementan, lo cual puede lentificar significativamente las consultas sobre el disco. Otra operación de E/S de importancia que se produce en segundo plano es el subproceso de depuración (Consulte Sección 15.12, “Implementación de multiversió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.