Signatur
Beschreibung
db2_statistics() ruft Informationen über Indizes und Tabellenstatistiken einer IBM DB2-Tabelle ab. Das zurückgegebene Resultset enthält Metadaten wie Indexnamen, Indextypen, Spaltenpositionen innerhalb von Indizes sowie statistische Informationen zur Tabelle selbst (z. B. Kardinalität und Anzahl der Seiten).
Diese Funktion ist besonders nützlich bei der Datenbankanalyse und -optimierung: Sie erlaubt es, zur Laufzeit zu prüfen, welche Indizes auf einer Tabelle existieren, und kann so bei der Erstellung von Query-Optimierungsstrategien helfen. Durch den Parameter unique lässt sich die Ausgabe auf eindeutige Indizes beschränken.
Das zurückgegebene Ergebnis-Handle kann wie ein normales Statement-Handle mit Funktionen wie db2_fetch_assoc() oder db2_fetch_array() iteriert werden. Die Ergebnisspalten folgen dem ODBC-Standard und liefern unter anderem TABLE_NAME, INDEX_NAME, TYPE, COLUMN_NAME, NON_UNIQUE, CARDINALITY und PAGES.
Die Funktion steht nur zur Verfügung, wenn die IBM DB2-Extension (ibm_db2) in PHP installiert und aktiviert ist. Sie eignet sich nicht für andere Datenbanken wie MySQL oder PostgreSQL.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | resource | Eine aktive DB2-Datenbankverbindung, wie sie von db2_connect() oder db2_pconnect() zurückgegeben wird. |
|
| $qualifier Pflicht | ?string | Der Qualifier für DB2-Datenbanken auf OS/390- oder z/OS-Systemen. Für andere Plattformen oder wenn nicht benötigt, null übergeben. |
|
| $schema Pflicht | ?string | Das Datenbankschema, in dem die Tabelle gesucht wird. Wird null übergeben, werden alle Schemas durchsucht. Groß-/Kleinschreibung kann je nach Datenbankeinstellung relevant sein. |
|
| $table_name Pflicht | string | Der exakte Name der Tabelle, für die Statistiken und Indexinformationen abgefragt werden sollen. Groß-/Kleinschreibung beachten. | |
| $unique Pflicht | bool | Wenn true, werden nur eindeutige Indizes zurückgeliefert. Bei false werden alle Indizes (eindeutige und nicht-eindeutige) sowie Tabellenstatistiken zurückgegeben. |
Rückgabewert
db2_fetch_assoc() oder ähnlichen Funktionen iteriert werden kann. Bei einem Fehler wird false zurückgegeben.Beispiele
Alle Indizes einer Tabelle auflisten
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheimesPasswort');
if ($conn) {
$stmt = db2_statistics($conn, null, 'DB2ADMIN', 'EMPLOYEE', false);
if ($stmt) {
while ($row = db2_fetch_assoc($stmt)) {
echo 'Index: ' . $row['INDEX_NAME'] . "\n";
echo 'Spalte: ' . $row['COLUMN_NAME'] . "\n";
echo 'Eindeutig: '. ($row['NON_UNIQUE'] ? 'Nein' : 'Ja') . "\n";
echo 'Typ: ' . $row['TYPE'] . "\n\n";
}
db2_free_result($stmt);
} else {
echo 'Fehler beim Abrufen der Statistiken: ' . db2_stmt_errormsg();
}
db2_close($conn);
} else {
echo 'Verbindung fehlgeschlagen: ' . db2_conn_errormsg();
}
?>
Nur eindeutige Indizes abfragen
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheimesPasswort');
if ($conn) {
// true = nur eindeutige Indizes
$stmt = db2_statistics($conn, null, 'DB2ADMIN', 'EMPLOYEE', true);
if ($stmt) {
echo "Eindeutige Indizes der Tabelle EMPLOYEE:\n";
while ($row = db2_fetch_assoc($stmt)) {
if (!is_null($row['INDEX_NAME'])) {
printf(
"%-30s %-20s Kardinalität: %d\n",
$row['INDEX_NAME'],
$row['COLUMN_NAME'],
$row['CARDINALITY']
);
}
}
db2_free_result($stmt);
}
db2_close($conn);
}
?>
// Wichtig · Fallstricke
Hinweis zur Verfügbarkeit: Diese Funktion erfordert die ibm_db2-Extension, die separat installiert werden muss (pecl install ibm_db2). Sie ist nicht im PHP-Standard-Kern enthalten.
Ergebnisspaltennamen: Die genauen Spaltennamen im Resultset richten sich nach dem ODBC-Standard. Prüfe die IBM-Dokumentation für eine vollständige Liste (u. a. TABLE_CAT, TABLE_SCHEM, TABLE_NAME, NON_UNIQUE, INDEX_QUALIFIER, INDEX_NAME, TYPE, ORDINAL_POSITION, COLUMN_NAME, ASC_OR_DESC, CARDINALITY, PAGES).
Tabellenstatistiken: Zeilen vom Typ TYPE = 0 (SQL_TABLE_STAT) repräsentieren die Tabellenstatistiken selbst und enthalten keine Indexinformationen – INDEX_NAME ist dann null. Filtere diese Zeilen bei Bedarf explizit heraus.