Früher oder später werdet ihr eventuell folgende PHP-Routine schätzen lernen...
Der mySQL-Befehl EXPLAIN zeigt an, wie eine Datenbank-Abfrage umgesetzt wird - vorallem bei welchen Tabellen eine Anfrage sehr lange dauert und wo der Einsatz von Indezes eine Steigerung bringt.
Die PHP-Routine stellt das Ganze etwas übersichtlicher dar.
Zur Funktion:
analyseQuery (
Datenbank,
SQL-Abfrage zB "SELECT id FROM table1 AS a1...",
mode = 1 wenn die Anzahl der zutreffenden Zeilen ermittelt werden soll, daß entspricht dann einer realen Abfrage und kann einiges dauern...
)
Optimieren von Datenbanken geht nicht, ohne daß man sich Gedanken gemacht hat über INDEZES, letztlich habe ich manchmal Datenbank-Abfragen gemacht, die tausendmal schneller liefen, wenn ich vorher einen Index 'created' und ihn danach wieder 'gedropped' habe.
function analyseQuery ($db, $query, $mode = 0)
{
$ergq = mysql_query("EXPLAIN $query",$db);
print "<table border="1" cellspacing="0">";
print "<tr>";
print "<td colspan="8" class="tinytable">".htmlentities($query)."</td>";
print "</tr>";
print "<tr>";
print "<td class="tinytable">table</td>";
print "<td class="tinytable">type</td>";
print "<td class="tinytable">possible_keys</td>";
print "<td class="tinytable">key</td>";
print "<td class="tinytable">key_len</td>";
print "<td class="tinytable">ref</td>";
print "<td class="tinytable">rows</td>";
print "<td class="tinytable">Extra</td>";
print "</tr>";
$rowsprod = 1;
while ($dsatz = mysql_fetch_array($ergq))
{
$rows = $dsatz["rows"];
$rowsprod *= $rows;
print "<tr>";
print "<td class="tinytable">".$dsatz["table"]."</td>";
print "<td class="tinytable">".$dsatz["type"]."</td>";
print "<td class="tinytable">".$dsatz["possible_keys"]."</td>";
print "<td class="tinytable">".$dsatz["key"]."</td>";
print "<td class="tinytable">".$dsatz["key_len"]."</td>";
print "<td class="tinytable">".$dsatz["ref"]."</td>";
print "<td class="tinytable">$rows</td>";
print "<td class="tinytable">".$dsatz["Extra"]."</td>";
print "</tr>";
}
print "<tr>";
print "<td colspan="8" class="tinytable">Anzahl Abfragen = $rowsprod</td>";
print "</tr>";
if ($mode == 1)
{
$ergqr = mysql_query("$query", $db);
$c = mysql_num_rows($ergqr);
print "<tr>";
print "<td colspan="8" class="tinytable">Anzahl Treffer = $c</td>";
print "</tr>";
}
print "</table>";
}