Las bases de datos guardan su información en el disco duro y esta lectura al dispositivo de almacenamiento puede representar un importante cuello de botella. Es por eso que Mysql y otros manejadores de BD utilizan estrategias de Pools y Caches para mantener la información accedida frecuentemente en la memoria.
Cuando empezamos a aprender el uso de las bases de datos por lo regular pasa desapercibido este tema para nosotros. Pero al momento de trabajar con aplicaciones empresariales se deben de tomar en cuenta estas estrategias para asegurar una óptima utilización de los recursos con los que contamos. Es posible ajustar los valores de estas herramientas para adaptarnos a diferentes tipos de aplicación, por ejemplo si cuenta con altos niveles de lectura de datos o procesos transaccionales que leen y escriben constantemente.
MyISAM Key Cache
Nuestros datos se encuentran en archivos almacenados en el disco duro. Al hacer una solicitud Mysql busca en todo ese archivo por el dato que requerimos lo cual puede ser muy tardado si contamos con mucha información. La solución es la utilización de los índices que ayudan a crear un mapa que permite encontrar la información de inmediato (sin buscarla). Los índices también se almacenan en el disco duro por lo que si una aplicación tiene muchos accesos (por ejemplo búsquedas de un sku o usuarios) la respuesta se degrada.
El Key Cache nos permite cargar los índices con un mayor uso en la memoria lo cual permite tener un mejor acceso.
El algoritmo es sencillo. Al hacer una solicitud Mysql busca en el cache si puede obtener la información sobre la ubicación de la información. Si no la encuentra carga esa información en el cache para que pueda ser accedida mas tarde. Si el cache se llena, se retira la información que tenga un mayor tiempo sin uso.
http://dev.mysql.com/doc/refman/5.5/en/myisam-key-cache.html
InnoDB Buffer Pool
Para tablas que se encuentran en InnoDB existe el Buffer Pool. Este es un buffer que además de guardar en cache los índices, guarda los datos que son obtenidos. Es posible tener un gran control sobre el buffer pool modificando sus parámetros.
http://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html
MySQL Query Cache
Este es un cache general que almacena las consultas hechas a la base de datos junto con los resultados, por lo que ya no se procesa la consulta regresando inmediatamente los resultados. Cuando tenemos tablas que funcionan como catálogo o existen consultas muy frecuentes este cache nos puede resultar sumamente útil.
http://dev.mysql.com/doc/refman/5.1/en/query-cache.html
Mysql ya utiliza estos caches desde que se instala. Pero al crecer nuestra información y la cantidad de usuarios debemos verificar su uso óptimo y afinar sus parámetros para obtener el mejor rendimiento de nuestra base de datos de acuerdo a las necesidades de nuestra información.
Puedes encontrar excelente información en el manual de Mysql o en el libro MySQL Database Design and Tuning.