Christian Kruse: PHPMyAdmin

Beitrag lesen

Hallo Sven,

EDIT: Wenn ich mit COUNT() über PHP die Anzahl errechen lasse erhalte ich 929. Wie kann es also sein, dass ich im PHPMyAdmin ständig andere Daten angezeigt bekomme?

Dass das daran liegt, dass PHPMyAdmin die Statistik-Daten zu Rate zieht anstatt zu zählen haben dir ja schon die beiden anderen gesagt. Ich will noch kurz ausführen, warum PHPMyAdmin das macht.

InnoDB ist eine MVCC-Engine, wobei MVCC für Multiversion Concurrency Control steht. Das bedeutet, dass es pro Transaktion mehrere Status für den Datenbestand geben kann. Z.B. kann ein Datensatz, der durch ein INSERT eingefügt wurde in einer Transaktion sichtbar sein (in der, in der das INSERT abgefeuert wurde), in allen anderen aber nicht. Das gleiche gilt z.B. für Zeilen, die durch DELETE oder UPDATE verändert wurden.

Um also korrekt zu erkennen, wieviele Zeilen in dieser Transaktion vorhanden sind, kann MySQL keine Abkürzung nehmen (das ist bei MyISAM der Fall, hier kann er einfach in den Metadaten nachschauen wieviele Rows vorhanden sind) sondern muss jede einzelne Reihe überprüfen, also einen full table scan machen. Das ist nicht nur ordentlich Arbeit für die Datenbank sondern es führt auch dazu, dass der User lange warten muss. Übliche Varianten um das Problem zu umgehen sind endweder Zählertabellen (wenn man es wirklich genau wissen muss) oder halt das nachsehen in den Statistiken, die aber nur einen ungefähren Wert liefen.

Bei knapp 1000 Rows ist das noch nicht wirklich ein Problem, aber es soll dem Gerücht nach auch grössere Datenbanken geben... ;-)

LG,
CK