He tenido éxito en el pasado al almacenar los resultados (pesadamente) procesados de una consulta de base de datos en memcached, utilizando la última hora de actualización de las tablas subyacentes como parte de la clave de caché. Para las tablas MyISAM, la hora del último cambio está disponible en SHOW TABLE STATUS
. Desafortunadamente, eso suele ser NULL para tablas InnoDB.¿Cómo puedo determinar cuándo se modificó por última vez una tabla InnoDB?
En MySQL 4.1, el ctime para un InnoDB en su línea SHOW TABLE STATUS
solía ser su última actualización, pero eso no parece ser cierto para MySQL 5.1.
Hay un campo DATETIME en la tabla, pero solo se muestra cuando una fila ha sido modificada: ¡no puede mostrar el tiempo de eliminación de una fila que ya no existe! Entonces, realmente no puedo usar MAX(update_time)
.
Aquí está la parte realmente difícil. Tengo varias réplicas de las que leo. ¿Puedo averiguar el estado de la tabla que no depende de cuándo se han aplicado realmente los cambios?
Mi conclusión después de trabajar en esto por un tiempo es que no va a ser posible obtener esta información tan barata como me gustaría. Probablemente voy a guardar en caché los datos hasta el momento en que espero que la tabla cambie (se actualiza una vez al día), y permitir que el caché de consultas ayude donde pueda.
tener en cuenta si va por la ruta 2.º sobre InnoDB desencadena: "Nota Actualmente, las acciones de clave externa en cascada no activan desencadenantes". (de [13.2.2.5. Restricciones de KEY FOREIGN] (http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html)) –