Stephan Huber: Statistik aus MySQL-DB => Geschwindigkeit

Beitrag lesen

Hallo Michael,

// 4.1 verschiedene Besucher
function verschbes ($anfdatum,$enddatum) {
global $db;
$sql="SELECT id,session_id from daten where time>=$anfdatum and time<=$enddatum group by session_id";
$res=send_sql($db,$sql);
$verschbes=mysql_num_rows($res);

Wenn Du es mit "select count(session_id)..." machst, geht es sehr viel schneller, weil MySQL nur eine Zeile zurückliefern muß, nicht ein paar Tausend, wie wahrscheinlich in Deinem Fall.

// 4.2 Einzelne Seiten ($p)
function einzseiten ($anfdatum,$enddatum,$p) {
global $db;
$sql="SELECT id from daten where time>=$anfdatum and time<=$enddatum and var_p='$p'";

Der Punkt mit count gilt hier genauso. Außerdem rufst Du die Funktion dann nacheinander ziemlich oft mit einem verschiedenen Parameter für p auf. Besser: nur einmal aufrufen, und den query ungefähr so bauen:
"select count(*) from daten where time>=$anfdatum and time<=$enddatum group by var_p order by var_p"
und dann einfach die Anzahl pro Seite der Reihe nach ausgeben.

Grundsätzlich ist es keine besonders gute Idee, MySQL für eine Zugriffsstatistik zu benutzen, und zwar nicht wegen der Auswertung (die ruft ja nur einer auf), sondern wegen der Tatsache, daß Du bei jedem Zugriff auf eine Seite einen insert auslöst, zumindest nehme ich das mal (und insert sind viel zeitintensiver als selects). Sinnvoller wäre es, die normalen Webserver-Logs zu benutzen, und die Infos einmal im Monat sinnvoll aufbereitet in die MySQL-Datenbank zu schmeißen, z.B. mit einem Cronjob.

Viele Grüße
Stephan