MySQL dispone de una cache (query_cache) que se encarga de guardar la cadena de texto de una petición junto con su respuesta para acceder a ella posteriormente. De esta manera no tiene que volver a analizar la sentencia y ejecutarla, con el consiguiente aumento de la velocidad.
A continuación explicaremos cómo activar la cache en nuestro MySQL y ejecutaremos un ejemplo para ver los resultados.
Para activar la query_cache editamos el fichero my.cnf y añadimos lo siguiente:
[mysqld]
query_cache_type=1
query_cache_size=64M
Luego reiniciamos el servicio.
/etc/init.d/mysqld restart
Para asegurarnos que la cache está activada ejecutamos:
mysql> show variables like 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
1 row in set (0.00 sec)
Ejecutamos la siguiente consulta:
mysql> select count(*), ID_CATEGORIA from ANUNCIO group by ID_CATEGORIA;
+----------+--------------+
| count(*) | ID_CATEGORIA |
+----------+--------------+
(...)
+----------+--------------+
87 rows in set (0.23 sec)
El tiempo de respuesta ha sido de 0.23 segundos.
Ahora volveremos a ejecutar la misma consulta y verificaremos que el tiempo de respuesta sea menor que el anterior:
mysql> SELECT count(*), ID_CATEGORIA from ANUNCIO group by ID_CATEGORIA;
+----------+--------------+
| count(*) | ID_CATEGORIA |
+----------+--------------+
(...)
+----------+--------------+
87 rows in set (0.00 sec)
Efectivamente, ahora el tiempo ha sido de 0.00 segundos.
La cache almacena la query en base a la cadena que se ha introducido. Si en vez de "count" escribimos "COUNT" (en mayúsculas) veremos que el tiempo de respuesta ha vuelto a aumentar:
mysql> SELECT COUNT(*), ID_CATEGORIA from ANUNCIO group by ID_CATEGORIA;
+----------+--------------+
| COUNT(*) | ID_CATEGORIA |
+----------+--------------+
(...)
+----------+--------------+
87 rows in set (0.25 sec)
Para evitar que los resultados de una query se saquen de la cache podemos indicarlo mediante SQL_NO_CACHE:
mysql> select SQL_NO_CACHE count(*), ID_CATEGORIA from ANUNCIO group by ID_CATEGORIA;
+----------+--------------+
| COUNT(*) | ID_CATEGORIA |
+----------+--------------+
(...)
+----------+--------------+
87 rows in set (0.25 sec)
Comentarios recientes
8 weeks 1 day ago
22 weeks 2 days ago
27 weeks 5 days ago
36 weeks 3 days ago
44 weeks 2 days ago
51 weeks 5 days ago
1 year 3 days ago
1 year 12 weeks ago
1 year 12 weeks ago
1 year 15 weeks ago