MySQL Abfrage. 136 Abfragen in 20 Sekunden normal?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL Abfrage. 136 Abfragen in 20 Sekunden normal?

    Hallo,

    Ich bin gerade an der Erstellung einer Website. Da hier der Text in 4 Sprachen ist, muss ich natürlich pro wort/Eintrag eine ID in der Datenbank suchen und das entsprechende Wort in der gewählten Sprache auslesen und anzeigen lassen.

    Leider dauert das ganze sehr lange, weshalb ich mir erlaubt habe in der Datenbankklasse einen Eintrag einzubauen, der in eine trackingTabelle alle Anfragen hineinschreibt und mit Zeitstempel versieht.

    Auf diese Weise konnte ich herausfinden, dass ich alleine für die Startseite mindestens 136 Abfrage habe und der Aufbau 20 Sekunden dauert. Das ist absolut inakzeptabel.

    Bei einem Transfer von einer Datenbank in eine andere habe ich es einmal auf 4000 Einträge in 10 Sekunden geschafft.

    Woran kann so etwas liegen? Wie sehr verzögern Vergleiche von Einträgen zweier oder mehrerer Tabellen die ganze Sache?



    Verbindung ist schneller als einfaches DSL, PHP 4.3.10, MySQL Client API 3.23.58, PC Athlon XP 2200+, 1.8GHz, 384MB RAM, XP Prof SP 2
    90% Prozent des Problems sitzen vorm PC

  • #2
    Auf diese Weise konnte ich herausfinden, dass ich alleine für die Startseite mindestens 136 Abfrage
    Lol, das beste CMS schafft es mit sämtlichen Operationne (Logs, Container, sonstnoch was) nichtmal auf 1/3.

    Vielleicht setzt du da mal an.
    EDIT:
    Oder ist 1/3 nicht noch zu hoch gegriffen

    Kommentar


    • #3
      meistens macht man das alles auch mit einzelnen verschiedenen Dateien, wie z.B de.php oder en.php , welche man dann einfach je nach Sprachauswahl includet...
      Bei Risiken und Nebenwirkungen fragen Sie Dr.Alban

      Kommentar


      • #4
        Das mit dem Include ist natürlich ne interessante Alternative, aber ich muss leider mit dem arbeiten was mir vorgesetzt wird. Für eine umstrukturierung reicht da die Zeit einfach nicht aus.

        Das mit dem CMS und 1/3 hab ich nicht verstanden. Inwiefern sollte ich da ansetzen!?
        90% Prozent des Problems sitzen vorm PC

        Kommentar


        • #5
          Original geschrieben von sonnenfänger
          Das mit dem Include ist natürlich ne interessante Alternative, aber ich muss leider mit dem arbeiten was mir vorgesetzt wird. Für eine umstrukturierung reicht da die Zeit einfach nicht aus.

          Das mit dem CMS und 1/3 hab ich nicht verstanden. Inwiefern sollte ich da ansetzen!?
          klingt für mich eher nach queries in einer while-schleife

          @tobi
          1/3 von 136 => 45 abfragen .... hallo? was soll das denn für ein cms sein. selbst das grottenschlechte nuke kommt grad mal auf 20-25 (afaik).
          Kissolino.com

          Kommentar


          • #6
            @tobi
            1/3 von 136 => 45 abfragen .... hallo? was soll das denn für ein cms sein. selbst das grottenschlechte nuke kommt grad mal auf 20-25 (afaik).
            joar, ich hatte in dem moment irgendwie die anzahl der tabellen im Kopf gehabt. Nicht die Queries.

            Kommentar


            • #7
              Original geschrieben von Wurzel
              klingt für mich eher nach queries in einer while-schleife

              @tobi
              1/3 von 136 => 45 abfragen .... hallo? was soll das denn für ein cms sein. selbst das grottenschlechte nuke kommt grad mal auf 20-25 (afaik).
              Okay, von welcher Zeit reden wir eigentlich? 20-25 Abfragen pro Sekunde?!

              Und queries in einer While Schleife hab ich mir mal vor einiger Zeit abgewöhnt :-) Das wird brav mit einer erledigt und das Ergebniss dann in einer While Schleife dargestellt. Oder gibts noch bessere Lösungen!?

              Will halt so wenig Netzlast wie möglich ...
              90% Prozent des Problems sitzen vorm PC

              Kommentar


              • #8
                ich frag mal andersrum:
                du rufst die startseite auf und es werden 136 abfragen abgesetzt, um deine einzige anfrage abzuarbeiten? oder sind das mehrere zugriffe gleichzeitig (von unterschiedl. usern)? wenn das erstere zutrifft, frage ich mich allen ernstes, was du zum henker abfragst, um auf 136 abfragen zu kommen?
                Kissolino.com

                Kommentar


                • #9
                  Und queries in einer While Schleife hab ich mir mal vor einiger Zeit abgewöhnt :-) Das wird brav mit einer erledigt und das Ergebniss dann in einer While Schleife dargestellt. Oder gibts noch bessere Lösungen!?
                  Ich denke du hast über 100 Abfragen???

                  Kommentar


                  • #10
                    Original geschrieben von Wurzel
                    ich frag mal andersrum:
                    du rufst die startseite auf und es werden 136 abfragen abgesetzt, um deine einzige anfrage abzuarbeiten? oder sind das mehrere zugriffe gleichzeitig (von unterschiedl. usern)? wenn das erstere zutrifft, frage ich mich allen ernstes, was du zum henker abfragst, um auf 136 abfragen zu kommen?
                    Ich habe eine Seite mit 135 Wörtern. Jedes Wort hat eine eigene ID.

                    Dazu:

                    startseite.php
                    include ("Text.inc.php");

                    $wort = new Text();

                    An entsprechender Stelle steht dann immer im HTML Code:
                    <?php echo $wort->getFromID(TEXTID); ?>

                    Ich habe also in meinem HTML 135 dieser Einträge. Kommen wir zur Klasse:

                    function getWithID($id) {
                    global $sess;
                    global $conn;

                    $query = "SELECT TL.TextLang AS Word FROM t_texts_lang TL, t_texts T WHERE T.TextID = TL.Text AND TL.Text = ".$id." AND TL.Lang = ".$sess->getLang() ;
                    $erg = $conn->executeQuery($query);

                    if ($erg) {
                    $rec = mysql_fetch_assoc($erg);
                    return ($rec["Word"]);
                    }
                    else {
                    return false;
                    }

                    }

                    $sess->Lang() ist die aktuelle Sprache der Session, geht von 1-4:

                    Ausgesucht wird aus 2 Tabellen.

                    1. Tabelle (für interne Zwecke):
                    TextID,
                    AllLang,
                    Description,
                    URL

                    2. Tabelle (Texttabelle)
                    ItemID
                    Text (Hier steht die TextIDder 1.Tabelle)
                    Lang (1-4)
                    TextLang(Text in der entsprechenden Sprache ..

                    Und langsam frag ich mich wieso ich eigentlich für die alleinige Anzeige die 1. Tabelle brauche ...
                    90% Prozent des Problems sitzen vorm PC

                    Kommentar


                    • #11
                      warum für jedes wort nen DB-Zugriff ?
                      Beim Initialisieren der Klasse würde ich einmal alle relevanten Daten holen und diese dann serverseitig ablegen, bis das Object nicht mehr gebraucht wird .

                      €: soll das die selbe methode sein ?

                      <?php echo $wort->getFromID(TEXTID); ?>

                      function getWithID($id) ...
                      Zuletzt geändert von DrNorton; 30.06.2005, 12:40.
                      Rock on, Chummers
                      DrNorton

                      Kommentar


                      • #12
                        Original geschrieben von DrNorton
                        warum für jedes wort nen DB-Zugriff ?
                        Beim Initialisieren der Klasse würde ich einmal alle relevanten Daten holen und diese dann serverseitig ablegen, bis das Object nicht mehr gebraucht wird .
                        Gut, das wäre natürlich am intelligentesten. Du würdest also Vorschlagen, da wo überall der PHP eintrag getFromID steht, da eine Variable in und am Anfang den SELECT mit allen IDs?

                        Wie sollte der Select dann aussehen? Woher weiss ich, welches Wort welcher Variable zugeordnet werden soll?

                        SELECT TextLang FROM Texttabelle WHERE (TextID=1 OR Text=2 OR TextID=3) AND Lang = 2

                        Theoretisch erhalte ich 3 Werte, oder? Wenn jetzt aber ein Wert leer ist, verschiebt es doch alles um eins. Das heisst ich habe die Worte nicht mehr an der richtigen Stelle. Oder sehe ich das falsch?
                        90% Prozent des Problems sitzen vorm PC

                        Kommentar


                        • #13
                          Wenn jetzt aber ein Wert leer ist, verschiebt es doch alles um eins.
                          1. Warum sollte eins leer sein?
                          2. Wozu hast du denn bitte die ID`?
                          Zuletzt geändert von TobiaZ; 30.06.2005, 12:49.

                          Kommentar


                          • #14
                            Du könntest ja die ID noch mitselektieren und als Arrayindex verwenden...
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              Original geschrieben von mrhappiness
                              Du könntest ja die ID noch mitselektieren und als Arrayindex verwenden...
                              Macht langsam Spass hier. richtig gute Ideen :-)

                              Also etwa so?

                              PHP-Code:
                              <?
                                 $query = "SELECT TextLang, TextID FROM Texttabelle WHERE (TextID=1 OR TextID=2 OR TextID=3) AND Lang=2";
                                 $erg = $conn->executeQuery($query);

                                 if ($erg){
                                    $i=0;
                                    while ($list=mysql_fetch_assoc($erg)){
                                       
                                        $wertID[$i] = $list["TextID"];
                                        $wertWort[$i] = $list["TextLang"];

                                    }
                                 } else {
                                    echo "ERR!";
                                 }
                                
                              ?>
                              ... öhm und jetzt? Wie bekomm ich denn die richtigen Daten in die richtige Variable? Geht ja nicht ohne viele Ifs und Whiles oder?
                              90% Prozent des Problems sitzen vorm PC

                              Kommentar

                              Lädt...
                              X