Ich hatte in der Vergangenheit erfolgreich die (stark) verarbeiteten Ergebnisse einer Datenbankabfrage in memcached gespeichert, wobei die letzte Aktualisierungszeit der zugrunde liegenden Tabellen als Teil des Cache-Schlüssels verwendet wurde. Für MyISAM-Tabellen ist die zuletzt geänderte Zeit in SHOW TABLE STATUS
verfügbar. Leider ist das für InnoDB-Tabellen normalerweise NULL.Wie kann ich feststellen, wann eine InnoDB-Tabelle zuletzt geändert wurde?
In MySQL 4.1 war die ctime für eine InnoDB in seiner SHOW TABLE STATUS
Zeile in der Regel die tatsächliche letzte Update-Zeit, aber das scheint nicht wahr zu sein für MySQL 5.1.
Es gibt ein DATETIME-Feld in der Tabelle, aber es wird nur angezeigt, wenn eine Zeile geändert wurde - es kann nicht die Löschzeit einer Zeile angezeigt werden, die nicht mehr vorhanden ist! Also kann ich wirklich MAX(update_time)
nicht verwenden.
Hier ist der wirklich knifflige Teil. Ich habe eine Reihe von Repliken, von denen ich lese. Kann ich den Status der Tabelle herausfinden, der nicht darauf angewiesen ist, wann die Änderungen tatsächlich angewendet wurden?
Meine Schlussfolgerung nach der Arbeit für eine Weile ist, dass es nicht möglich sein wird, diese Informationen so billig zu bekommen, wie ich möchte. Ich werde wahrscheinlich Daten bis zu dem Zeitpunkt zwischenspeichern, zu dem ich erwarte, dass sich die Tabelle ändert (es wird einmal am Tag aktualisiert), und der Abfragecache kann helfen, wo es möglich ist.
Beachten Sie, wenn das Gehen den 2.ten Route über InnoDB auslöst: "Hinweis Derzeit kaskadierte Fremdschlüsselaktionen aktivieren keine Trigger." (aus [13.2.2.5. FOREIGN KEY Constraints] (http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html)) –