SQL ANALYZE sammelt und aktualisiert Statistiken über den Inhalt von Tabellen – etwa Zeilenzahlen, Kardinalität und die Verteilung von Indexwerten. Der Query-Optimizer stützt sich auf diese Statistiken, um einen guten Ausführungsplan zu wählen. Sind die Statistiken veraltet (zum Beispiel nach großen Einfüge- oder Löschaktionen), kann der Optimizer falsche Annahmen treffen und unnötig langsame Pläne wählen – ANALYZE behebt das.
ANALYZE in PostgreSQL
Ohne Argument analysiert ANALYZE alle Tabellen und materialisierten Sichten der aktuellen Datenbank:
ANALYZE;
Mit Tabellenliste wird gezielt analysiert:
ANALYZE kunden;
Die Ergebnisse landen im Systemkatalog pg_statistic; der Planer nutzt sie für Kostenabschätzungen. Automatisch läuft ANALYZE nach größeren Änderungen im Hintergrund (Autovacuum) – bei massiven Datenänderungen lohnt sich der manuelle Aufruf trotzdem. Häufig kombiniert man VACUUM ANALYZE, das zugleich Platz freigibt und Statistiken erneuert.
ANALYZE TABLE in MySQL und MariaDB
MySQL und MariaDB verwenden ANALYZE TABLE, um die Index-Statistiken (Key Distribution) zu aktualisieren, die der Optimizer für die Planwahl benötigt:
ANALYZE TABLE kunden;
Während der Analyse hält InnoDB einen kurzen Read-Lock auf der Tabelle. Bei sehr großen Tabellen kann ANALYZE TABLE ... PERSISTENT FOR ALL (MariaDB) helfen, die Statistik dauerhaft zu speichern. Sinnvoll ist der Aufruf nach großen Datenmengen-Änderungen oder wenn Abfragen plötzlich langsamer werden, obwohl Indizes vorhanden sind (siehe SQL INDEX).
Zusammenhang mit dem Ausführungsplan
Der Erfolg von ANALYZE zeigt sich in SQL EXPLAIN: Stimmen geschätzte und tatsächliche Zeilenzahlen im Plan überein, sind die Statistiken aktuell. Veraltete Statistiken erkennt man an großen Abweichungen – dann ANALYZE ausführen und den Plan erneut prüfen. Weitere Performance-Bausteine sind Query-Cache und Buffer-Pool.
Verwandte Grundlagen: Query-Optimierung, SQL-Grundlagen, Datenbank-Indizes.