2009-08-09 2 views

Antwort

11

phpMyAdmin SHOW TABLE STATUS verwendet, um Informationen für Ihre Tabellen zu erhalten.

Vom documentation:

Reihen

Die Anzahl der Zeilen. Einige Speicher-Engines, z. B. MyISAM, speichern die genaue Anzahl. Für andere Speicher-Engines wie InnoDB ist dieser Wert eine Annäherung und kann vom tatsächlichen Wert um 40 bis 50% abweichen. Verwenden Sie in solchen Fällen SELECT COUNT (*), um eine genaue Anzahl zu erhalten.

Dies liegt daran, dass InnoDB eine ACID konforme Speicher-Engine ist. InnoDB implementiert MVCC unter Verwendung der Zeilenebene locking. Kurz gesagt, es kann mehrere Kopien einer gegebenen Reihe zu einer gegebenen Zeit geben. Ich schlage vor, diesen Artikel zu lesen: Understanding InnoDB MVCC.

4

Da InnoDB eine transaktionale Speicher-Engine ist, kann die genaue Anzahl interpretiert werden. Beispielsweise können einige Zeilen im Speicher vorhanden sein, aber die Transaktion, mit der diese Zeilen erstellt wurden, wurde noch nicht festgeschrieben. Daher sollten die Zeilen nicht in der Zählung enthalten sein.

Noch verwirrender, Ihre Transaktion möglicherweise REPEATABLE READ Isolationsstufe, was bedeutet, nur Zeilen, die vor Ihre Transaktion begonnen wurden sichtbar sind verpflichtet. Einige Zeilen können festgeschrieben werden, aber erst seit dem Beginn Ihrer wiederholbaren Lesetransaktion. Daher sollten diese Zeilen auch nicht in der Zählung enthalten sein. Die gleichen Zeilen sind jedoch in einer Zählung enthalten, die von einer anderen Transaktion ausgeführt wurde, die später gestartet wurde, oder in der Isolationsstufe READ COMMITTED.

Aus diesem Grund kann diese Tabellenstatistik für InnoDB nur angenähert werden. Eine genaue Zählung erfordert einen Scan aller gespeicherten Zeilen, um zu sehen, ob sie für die aktuelle Transaktion sichtbar sind.

Verwandte Themen