Frage ob Zeit für SQL-Abfrage ok ist?

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

  • Frage ob Zeit für SQL-Abfrage ok ist?

    Hi, habe eine Tabelle mit 218 Datensätzen, wenn ich alle Datensätze auslese, werden 2,5 sec benötigt. Wenn ich aber einen Datensatz ändere, den ich über eine Checkbox ausgewählt habe, werden 8,5 sec benötigt. Was sagt ihr zu den Zeiten? Ist ziemlich lang gel.

    Hier mein SQL-Update Code:

    PHP-Code:
    if (isset($_POST['update'])) {
        foreach(
    $_POST['ID'] as $ID) {

            
    $Abmessung "Abmessung" $ID;
            
    $Vorschub "Vorschub" $ID;
            
    $Ausbringung "Ausbringung" $ID;
            
    $Auswahl="Auswahl"$ID;


            
    $Ausbringung 7.9 $_POST[$Vorschub]/1000 M_PI 
                                      
    pow($_POST[$Abmessung], 2) / 1000 3600;
            
    $Ausbringung round($Ausbringung0);
            
            if (
    $_POST[$Auswahl]) {
            
    $sql "update geff_vorgabe_itw set
            Abmessung='" 
    $_POST[$Abmessung] . "',
            Vorschub='" 
    $_POST[$Vorschub] . "',
            Ausbringung='" 
    $Ausbringung "'
            where ID='" 
    $ID "'";

            
    $result mysql_query($sql$link)or die ("MySQL-Fehler: " mysql_error());
            
    // mysql_free_result($result);
         
    }
        }

    Will mir alle 218 Datensätze in einer Tabelle mit input Feldern anzeigen lassen. Es können praktisch alle 218 Datensätze bearbeitet bzw. gelöscht werden, wenn sie über die Checkbox markiert wurden sind. Wieso dauert es bei einen Datensatz so lange? Wie sollte ich mein Code ändern?

  • #2
    wenn du dir die tabelle per phpmyadmin ausgeben lässt, dauerts da auch so lange??

    haste sinnvolle indexe gesetzt?! primary keys usw?

    Kommentar


    • #3
      Mit phpmyadmin geht es fix:

      Zeige Datensätze 0 - 217 (218 insgesamt, die Abfrage dauerte 0.0023 sek)
      Die Tabelle hat folgendenden Aufbau:
      ID ITW Abmessung Vorschub Ausbringung

      ID ist dabei der Primärschlüssel.

      Kommentar


      • #4
        wieso berechnest du
        PHP-Code:
                $Ausbringung 7.9 $_POST[$Vorschub]/1000 M_PI 
                                          
        pow($_POST[$Abmessung], 2) / 1000 3600;
                
        $Ausbringung round($Ausbringung0); 
        nicht mit innerhalb von

        if ($_POST[$Auswahl]) {
        ...
        }

        nur mal so nebenbei..

        abert sonst seh ich da nicht wirklich einen fehler Oo

        Kommentar


        • #5
          Ne die Berechnung steht oberhalb der if-Anweisung. Kann es an der foreach-Schleife liegen?

          Kommentar


          • #6
            Wie sieht denn der Code bei der Ausgabe aus?

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              das sie oberhalb steht seh ich selber warum du es aber nicht innerhalb machst frag ich mich..
              weil du das ja nur brauchst wenn $_POST[$auswahl] gesetzt ist und du es dann in der datenbank abänderst..

              Kommentar


              • #8
                Hab die Berechnung mal in die If-Anweisung gesteckt, dauert jetzt nur 6,3 sec? gibt es noch ne Optimierung?

                Kommentar


                • #9
                  Ja gel

                  Kommentar


                  • #10
                    Hier die Abfrage:
                    PHP-Code:
                    $sql "SELECT * FROM geff_vorgabe_itw ORDER BY ITW, Abmessung";
                        
                    $result mysql_query ($sql$link) or die ("MySQL-Fehler: " mysql_error());
                        while (
                    $row mysql_fetch_array($result)) {
                            echo
                    '
                       <tr>
                            <input type="hidden" name="ID[]" value="' 
                    $row['ID'] . '">
                        <td><input type="text" name="ITW' 
                    $row['ID'] . '" value="' $row['ITW'] . '" readonly size="2"></td>
                        <td><input type="text" name="Abmessung' 
                    $row['ID'] . '" value="' $row['Abmessung'] . '"></td>
                        <td><input type="text" name="Vorschub' 
                    $row['ID'] . '" value="' $row['Vorschub'] . '" size="22"></td>
                        <td><input type="text" name="Ausbringung' 
                    $row['ID'] . '" value="' $row['Ausbringung'] . '" readonly></td>
                        <td><input type="checkbox" name="Auswahl' 
                    $row['ID'] . '" value="' $row['ID'] . '"size="30"></td>
                       </tr>'
                    ;
                        } 

                    und hier die Ausgabe nach dem update:

                    PHP-Code:
                    <tr>
                    <
                    td><input type="text" name="ITW" value="' . $_POST['ITW'] . '" ' . $read . ' size="2"></td>
                    <
                    td><input type="text" name="Abmessung" value="' . $_POST['Abmessung'] . '" ' . $read . '></td>
                    <
                    td><input type="text" name="Vorschub" value="' . $_POST['Vorschub'] . '" size="22" ' . $read . '></td>
                    <
                    td><input type="text" name="Ausbringung" value="' . $Ausbringung . '" readonly></td>

                       </
                    tr

                    Kommentar


                    • #11
                      Original geschrieben von kraut29
                      Hab die Berechnung mal in die If-Anweisung gesteckt, dauert jetzt nur 6,3 sec? gibt es noch ne Optimierung?
                      Du kannst die Berechnung auch unter
                      PHP-Code:
                      if (isset($_POST['update'])) { 
                      packen, d.h. außerhalb des foreachs. Weil die Berechnung ist ja durchgangsunabhängig

                      Ansonsten, wie ist die Tabellen-Struktur? (Dump?)

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #12
                        Das muss ich schon in die foreach-Schleife packen, denn da deklariere ich doch erst die Variabeln?!

                        Spalten:

                        ID: Primärschlüssel int
                        ITW: smallint
                        Abmessung: double
                        Vorschub: smallint
                        Ausbringung: smallint


                        Meinst du das mit Tabellenstruktur?

                        Kommentar


                        • #13
                          Original geschrieben von kraut29
                          Das muss ich schon in die foreach-Schleife packen, denn da deklariere ich doch erst die Variabeln?!
                          jo stimmt, sry ~.~

                          Spalten:

                          ID: Primärschlüssel int
                          ITW: smallint
                          Abmessung: double
                          Vorschub: smallint
                          Ausbringung: smallint


                          Meinst du das mit Tabellenstruktur?
                          ja ... aber irgendwie ...

                          der macht ja die Schleife auch über alle Datensätze x_X

                          Mach das Formular doch so
                          PHP-Code:
                          echo '<tr>
                              <td><input type="text" name="ITW' 
                          $row['ID'] . '" value="' $row['ITW'] . '" readonly size="2"></td>
                              <td><input type="text" name="Abmessung' 
                          $row['ID'] . '" value="' $row['Abmessung'] . '"></td>
                              <td><input type="text" name="Vorschub' 
                          $row['ID'] . '" value="' $row['Vorschub'] . '" size="22"></td>
                              <td><input type="text" name="Ausbringung' 
                          $row['ID'] . '" value="' $row['Ausbringung'] . '" readonly></td>
                              <td><input type="checkbox" name="ID[]" value="' 
                          $row['ID'] . '"size="30"></td>
                             </tr>'

                          dann sind in $_POST['ID'] nur die IDs der Datensätze, die auch markiert sind, das spart ne Menge Schleifendurchläufe (übrigens, du solltest mal nen Validator über deinen Code laufen lassen, das hidden-Input war zwischen <tr> und <td> ziemlich doof platziert!)

                          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                          Wie man Fragen richtig stellt

                          Kommentar


                          • #14
                            Hab es so jetzt so umgesetzt. Aber eine große Zeitersparnis gibt es leider nicht. Hab 7.5 sec gemessen. Hast du sonst noch eine Idee?

                            Kommentar


                            • #15
                              So sieht der Code aus:

                              PHP-Code:
                              <?if (isset($_POST['update'])) {
                                  foreach($_POST['ID'] as $ID) {
                                      $Abmessung = "Abmessung" . $ID;
                                      $Vorschub = "Vorschub" . $ID;
                                      $Ausbringung = "Ausbringung" . $ID;



                                      $Ausbringung = 7.9 * $_POST[$Vorschub] / 1000 * M_PI / 
                                      4 * pow($_POST[$Abmessung], 2) / 1000 * 3600;
                                      $Ausbringung = round($Ausbringung, 0);
                                      $sql = "update geff_vorgabe_itw set
                                           Abmessung='" . $_POST[$Abmessung] . "',
                                           Vorschub='" . $_POST[$Vorschub] . "',
                                           Ausbringung='" . $Ausbringung . "'
                                           where ID='" . $ID . "'";

                                          $result = mysql_query($sql, $link)or die ("MySQL-Fehler: " . mysql_error());
                                          // mysql_free_result($result);

                                  }
                              }

                              ?>
                              <table align="center" border="1" class="table">
                               <caption><h2>GEFF-Richtwerte-ITW</h2></caption>
                                <form achtion="<?php $PHP_SELF?>" method="post">
                                 <tr class="beschriftung_fett">
                                  <td>ITW</td>
                                  <td>Abmessung in mm</td>
                                  <td>Vorschub<br>in m/s</td>
                                  <td>Ausbringung in kg/h</td>
                                  <td>Auswahl</td>
                                 </tr>
                              <?    
                              $sql = "SELECT * FROM geff_vorgabe_itw ORDER BY ITW, Abmessung";
                                  $result = mysql_query ($sql, $link) or die ("MySQL-Fehler: " . mysql_error());
                                  while ($row = mysql_fetch_array($result)) {
                                      echo'
                                 <tr>

                                  <td><input type="text" name="ITW' . $row['ID'] . '" value="' . $row['ITW'] . '" readonly size="2"></td>
                                  <td><input type="text" name="Abmessung' . $row['ID'] . '" value="' . $row['Abmessung'] . '"></td>
                                  <td><input type="text" name="Vorschub' . $row['ID'] . '" value="' . $row['Vorschub'] . '" size="22"></td>
                                  <td><input type="text" name="Ausbringung' . $row['ID'] . '" value="' . $row['Ausbringung'] . '" readonly></td>
                                  <td><input type="checkbox" name="ID[]" value="' . $row['ID'] . '"size="30"></td>
                                 </tr>';
                                  }

                                  ?>
                                 <tr>
                                  <td colspan="3"><input type="submit" name="update" value="&auml;ndern">
                                                  <input type="submit" name="new" value="neue Abmessung"></td>
                                  <td colspan="2"><input type="submit" name="delete" value="l&ouml;schen"></td>
                                 </tr>

                              Kommentar

                              Lädt...
                              X