Comment puis-je déterminer si une table InnoDB a été modifié?
J'ai eu du succès dans le passé, le stockage de l' (fortement) de traitement des résultats d'une requête de base de données dans memcached, à l'aide de la dernière heure de mise à jour des tables sous-jacentes(s) dans le cadre de la clé de cache. Pour les tables MyISAM, qui dernière modification du temps est disponible dans SHOW TABLE STATUS
. Malheureusement, c'est généralement la valeur NULL pour les tables InnoDB.
En MySQL 4.1, le ctime pour un InnoDB dans son SHOW TABLE STATUS
ligne est généralement de sa dernière mise à jour de temps, mais qui ne semble pas être vrai pour MySQL 5.1.
Il y a un champ DATETIME dans la table, mais il ne s'affiche que lorsqu'une ligne a été modifiée, il ne peut pas afficher la suppression de l'heure d'une ligne qui n'est plus là! Alors, j'ai vraiment ne peut pas utiliser MAX(update_time)
.
Voici la partie vraiment difficile. J'ai un certain nombre de répliques que je ne lit. Je peux comprendre l'état de la table qui ne repose pas sur lorsque les modifications ont été réellement appliquées?
Ma conclusion après avoir travaillé sur cette question depuis un certain temps, c'est qu'il ne va pas être possible pour obtenir cette information, un prix aussi bas que je le voudrais. Je vais probablement mettre en cache des données jusqu'à ce que le temps que j'attends de la table pour changer (il est mis à jour une fois par jour), et de laisser le cache de requête aider à sortir de là où il peut.
OriginalL'auteur David M | 2010-05-07
Vous devez vous connecter pour publier un commentaire.
C'est MySQL bug 14374, Quinze mille quatre cent trente huit, et sous-jacent InnoDB bug 2681.
J'ai deux suggestions (autres que les correctifs MySQL).
innodb_file_per_table
), stat le fichier sous-jacent. Vous pouvez écrire une fonction MySQL/extension pour ce faire. Cela peut se décaler légèrement, en raison de la mise en cache de la base de données.Je serais personnellement suggérer le second, comme son beaucoup plus portable et ne dépend pas de détails de mise en œuvre (tels que
innodb_file_per_table
).OriginalL'auteur derobert
Si vous n'êtes pas vraiment intéressé lorsque la base de données a été changé, mais vous voulez savoir si ou non une table de base de données a été modifié, vous devez regarder dans MySQL SOMME DE CONTRÔLE DE LA TABLE
Espère que cette aide.
Lent... 20k lignes il faut 0,3 secondes, juste horrible
OriginalL'auteur titel
Je suggère d'ajouter une autre colonne de la table et laissez MySQL garder une trace de quand la table a été modifiée en dernier, quelque chose comme ceci:
OriginalL'auteur crmpicco