Andreas: PHP/MySQL Zugriff beschleunigen

Hallo!
Bin gerade dabei meinen Warenkorb... jetzt auf dem Webserver zu testen, wobei mir auffällt, dass alles extrem lange dauert, schon wenn man die Anzahl um 1 verringert dauert das wirklich lange, ganz im Gegensatz zu meiner lokalen DB -klar.
Aber jetzt wollte ich mal fragen, wie man den Zugriff evtl beschleunigen kann und was ihr da für Erfahrungen mit gemacht habt. Die Datenbank ist leider noch auf dem Strato DB-Server.
Zur Zeit mache ich das wie folgt:

$link = mysql_connect("rdbms.strato.de", "user", "pwd");
$query = "use DBXXXXX";

Kann man die Verbindung nicht irgendwie offen lassen, mit mysql_pconnect?
Hat es Sinn diese Variablen mit include einzubinden?

Was könnt Ihr empfehlen?

Gruß
Andreas

  1. Hallo Andreas,

    Bin gerade dabei meinen Warenkorb... jetzt auf dem Webserver zu testen, wobei mir auffällt, dass alles extrem lange dauert, schon wenn man die Anzahl um 1 verringert dauert das wirklich lange, ganz im Gegensatz zu meiner lokalen DB -klar.

    Das liegt vermutlich eher an der Datenbankperformance des Providers.

    Aber jetzt wollte ich mal fragen, wie man den Zugriff evtl beschleunigen kann und was ihr da für Erfahrungen mit gemacht habt. Die Datenbank ist leider noch auf dem Strato DB-Server.

    Achso, dann ist ja langsam noch immer schnell ...
    Ich habe gerade mit 'ner Firma zu tun, die einen Business-Tarif bei diesem Anbieter nutzt und fuer 88,- DM im Monat mal locker 8 Wochen warten durfte, bis die schon lange hochgeladenen Seiten sichtbar waren ...

    Zur Zeit mache ich das wie folgt:

    $link = mysql_connect("rdbms.strato.de", "user", "pwd");
    $query = "use DBXXXXX";

    Verwende von PHP aus:
    mysql_select_db("DBXXXXX",$link);

    Kann man die Verbindung nicht irgendwie offen lassen, mit mysql_pconnect?

    Kann bei haeufigen Zugriffen Sinn machen, probiere es einfach aus.

    Hat es Sinn diese Variablen mit include einzubinden?

    Ja, aber dann bevorzugt aus einem Verzeichnis, welches nicht im DocumentRoot liegt.

    Was könnt Ihr empfehlen?

    Versuche mal, Deine Abfragen zu optimieren - die hast Du ja gar nicht erwaehnt. Lies nur benoetigte Felder aus und nicht immer SELECT * FROM tabelle ...

    MfG, Thomas

    1. Hi Thomas!

      Das liegt vermutlich eher an der Datenbankperformance des Providers.

      Wem sagst Du das.....

      Achso, dann ist ja langsam noch immer schnell ...
      Ich habe gerade mit 'ner Firma zu tun, die einen Business-Tarif bei diesem Anbieter nutzt und fuer 88,- DM im Monat mal locker 8 Wochen warten durfte, bis die schon lange hochgeladenen Seiten sichtbar waren ...

      Naja, dazu braucht man nicht viel sagen, bei uns waren die Seiten mal 4 Tage durchgehend kpl. down! Aber solange ich noch nicht genau weiß was ich langfristig will(NT/UNIX, MySQL/MSQL, gehosteter oder eigener Server...) weiß ich nicht so recht weiter, naja.

      Verwende von PHP aus:
      mysql_select_db("DBXXXXX",$link);

      Kann man die Verbindung nicht irgendwie offen lassen, mit mysql_pconnect?

      Kann bei haeufigen Zugriffen Sinn machen, probiere es einfach aus.

      Hat es Sinn diese Variablen mit include einzubinden?

      Ja, aber dann bevorzugt aus einem Verzeichnis, welches nicht im DocumentRoot liegt.

      OK, habe folgendes Script per Include eingebunden(Warum soll das in einem anderen Verzeichnis liegen?):

      <?php
      $Host= "rdbms.strato.de";
      $User= "xxxxy";
      $Passw= "xxxy";
      $DB= "DBxxxy";

      $vk=@mysql_connect($Host,$User,$Passw)
      or die ("die Verbindungsaufnahme ist gescheitert!");
      @mysql_select_db($DB,$vk)
      or die ("die Verbindungsaufnahme ist gescheitert!");

      function getError($myError,$myErrno) {
      echo "Bei dem Versuch einen Datensatz auszulesen ist ein Fehler aufgetreten.<br>\nFehler-Nummer:<b>".$myErrno."</b>
      <br>\nFehler-Ausgabe:<b>".$myError."</b>";
      }
      ?>

      Im Warenkorb steht dann z.B.

      include ("verbindung.php");

      $query = "SELECT * FROM Warenkorb";
        $res = mysql_query($query, $vk);

      $row=mysql_fetch_row($res)

      und immer über $row[0]... auslesen.

      Die SQL-Abfragen sind beschränke ich immer auf das nötigste.
      Wenn ich einen Datensatz aktualisiere, z.B. habe ich einen link um die Anzahl um 1 zu erhöhen, der Link schickt die Variable ID des Datensatzes mit, eigentlich könnte ich das mit den Sessions dann auch lassen, oder? ist ja eindeutig. Jedenfalls wird dann diese Script aufgerufen und per meta refresh sofort wieder der Warenkorb, dauert bei mir nur einen Bruchteil einer Sekunde, bei Strato superlange:
      <?php
      @session_start();
      ?>
      <html>
      <head>
      <meta http-equiv="refresh" content="0; URL=warenkorb.php">
      <?
      include ("verbindung.php");
      if (!mysql_query($query, $vk))
          die("Datenbank test existiert nicht.<br>\n");

      $update = "UPDATE Warenkorb SET Anzahl = Anzahl-1 WHERE ID = '$ID' AND PHPSESSID = '$PHPSESSID'";
      $res= mysql_query($update, $vk);
      ?>

      Wenn ich die Verbindung öffne, wird die so am längsten offen gehalten? muß ich dann jedesmal trotzdem per Include neu einbinden, denn auch da muß jedesmal eine neue Datei geladen werden, daas dauert auch ein bisschen, genau so weiß cih nicht, wie ich die Aktualisierungsanfrage aus meinem obigen Script auch direkt im Warenkorb durchführen könnte! Hast Du da eine Idee?

      Ja ich weiß, zemlich viel aufeinmal, jetzt kann ma aber dafür besser verstehen wo bei mir die Probleme liegen.
      Vielen Dank im voraus

      Andreas