Ankündigung

Einklappen
Keine Ankündigung bisher.

Laufzeit verkürzen

Einklappen

Neue Werbung 2019

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

  • Laufzeit verkürzen

    Hallo!

    Das Script läuft zwar odrnungsgemäß, doch bei 1000 partien wird es
    doch sehr langsam, und braucht ca. 5 sec., meine anderen scripte
    laufen trotz ähnlicher abarbeitungsgröße doch um einiges schneller.
    Könnt ihr mir ein paar Tuning Tipps geben?

    PHP-Code:
    <?php
     
    include("connect.inc.php");
    require(
    "config.php");
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Unbenanntes Dokument</title>
    </head>

    <body>
    <?php
        
        $query 
    "UPDATE spieler SET effizienz='' WHERE auf=''"
        
    mysql_query($query) or die ("MySQL-Fehler mit $query
    mysql_error()); 
        

        
    $sql "SELECT * FROM spieler WHERE auf!='0'";
        
    $result mysql_query($sql) OR die(mysql_error());    
        while(
    $row mysql_fetch_assoc($result)) {
                
        
    $torwart_effizienz[$row['ID']] = $row['torwart']*15 $row['kondition'] - (100-$row['moti']);
        
    $verteidiger_effizienz[$row['ID']] = $row['verteidigung']*10 $row['passspiel']*$row['kondition']*- (100-$row['moti']);
        
    $mittelfeldspieler_effizienz[$row['ID']] = $row['spielaufbau']*$row['passspiel']*$row['kondition']*- (100-$row['moti']);
        
    $angreifer_effizienz[$row['ID']] = $row['torschuss']*10 $row['passspiel']*$row['kondition']*- (100-$row['moti']);

        }
        foreach(
    $torwart_effizienz as $spielerid => $value) {
        
            
    $query2 "UPDATE spieler SET effizienz='$value'-('$value'/5) WHERE ID='$spielerid' AND auf='TW' AND position!='TW'"
            
    mysql_query($query2) or die ("MySQL-Fehler mit $query2
    mysql_error()); 
            
            
    $query2 "UPDATE spieler SET effizienz='$value' WHERE ID='$spielerid' AND auf='TW' AND position='TW'"
            
    mysql_query($query2) or die ("MySQL-Fehler mit $query2
    mysql_error()); 
        }
        foreach(
    $verteidiger_effizienz as $spielerid2 => $value2) {
        
            
    $query3 "UPDATE spieler SET effizienz='$value2'-('$value2'/10) WHERE ID='$spielerid2' AND auf='VERT' AND position!='VERT'"
            
    mysql_query($query3) or die ("MySQL-Fehler mit $query3
    mysql_error()); 
            
            
    $query4 "UPDATE spieler SET effizienz='$value2' WHERE ID='$spielerid2' AND auf='VERT' AND position='VERT'"
            
    mysql_query($query4) or die ("MySQL-Fehler mit $query4
    mysql_error()); 
        }
        foreach(
    $mittelfeldspieler_effizienz as $spielerid3 => $value3) {
        
            
    $query5 "UPDATE spieler SET effizienz='$value3'-('$value3'/10) WHERE ID='$spielerid3' AND auf='MF' AND position!='MF'"
            
    mysql_query($query5) or die ("MySQL-Fehler mit $query5
    mysql_error()); 
            
            
    $query6 "UPDATE spieler SET effizienz='$value3' WHERE ID='$spielerid3' AND auf='MF' AND position='MF'"
            
    mysql_query($query6) or die ("MySQL-Fehler mit $query6
    mysql_error()); 
        }
        foreach(
    $angreifer_effizienz as $spielerid4 => $value4) {
        
            
    $query7 "UPDATE spieler SET effizienz='$value4'-('$value4'/10) WHERE ID='$spielerid4' AND auf='ANG' AND position!='ANG'"
            
    mysql_query($query7) or die ("MySQL-Fehler mit $query7
    mysql_error()); 
            
            
    $query8 "UPDATE spieler SET effizienz='$value4' WHERE ID='$spielerid4' AND auf='ANG' AND position='ANG'"
            
    mysql_query($query8) or die ("MySQL-Fehler mit $query8
    mysql_error()); 
        }
            
    $sql4 "SELECT saison,woche FROM aktuelles";
            
    $result4 MYSQL_QUERY($sql4);
            if(!
    $result4) echo MYSQL_ERROR();
            
    $row4 MYSQL_FETCH_ASSOC($result4);
            
    $aktuelle_saison $row4['saison'];
            
    $aktuelle_woche $row4['woche'];
            
        
        
            
    $sql2 "SELECT heimverein,gastverein FROM partien WHERE saison='$aktuelle_saison' AND spieltag='$aktuelle_woche'";
            
    $result2 mysql_query($sql2) OR die(mysql_error());    
            while(
    $row2 mysql_fetch_assoc($result2)) {
                
                
    $heimverein[] = $row2['heimverein'];
                
    $gastverein[] = $row2['gastverein'];
            }
            foreach(
    $heimverein as $h_verein) {
                
                
    $sql5 "SELECT Sum(effizienz) As effizienz FROM spieler WHERE verein='$h_verein'";
                
    $result5 mysql_query($sql5) OR die(mysql_error());
                
                
                while(
    $row5 mysql_fetch_assoc($result5)) {
                
                
    $vereinseffizienz[$h_verein] = $row5[effizienz];
                
                }
            }
            
                foreach(
    $vereinseffizienz as $verein => $effizienz) {
                    
                        
    $sql555 "SELECT vereinsname,auf_anzahl FROM vereine WHERE vereinsname='$h_verein'";
                        
    $result555 mysql_query($sql555) OR die(mysql_error());
                        while(
    $row555 mysql_fetch_assoc($result555)) {
                
                            
    $spieleranzahl[$heimaufstellung] = $row555['auf_anzahl'];
                
                        }
                        
                        
    $query999 "UPDATE partien SET h_effizienz='$effizienz' WHERE h_auf_anzahl='11' AND heimverein='$verein' AND saison='$aktuelle_saison' AND spieltag='$aktuelle_woche'"
                        
    mysql_query($query999) or die ("MySQL-Fehler mit $query999
    mysql_error());
                        
                        
    $query222 "UPDATE partien SET h_effizienz='0' WHERE h_auf_anzahl!='11' AND heimverein='$verein' AND saison='$aktuelle_saison' AND spieltag='$aktuelle_woche'"
                        
    mysql_query($query222) or die ("MySQL-Fehler mit $query222
    mysql_error());
                        
                }
            foreach(
    $gastverein as $g_verein) {
                
                
    $sql44"SELECT Sum(effizienz) As effizienz2 FROM spieler WHERE verein='$g_verein'";
                
    $result44 mysql_query($sql44) OR die(mysql_error());
                
                
                while(
    $row44 mysql_fetch_assoc($result44)) {
                
                
    $vereinseffizienz2[$g_verein] = $row44[effizienz2];
                }
                    foreach(
    $vereinseffizienz2 as $verein2 => $effizienz2) {
                    
                        
    $query888 "UPDATE partien SET g_effizienz='$effizienz2' WHERE g_auf_anzahl='11' AND gastverein='$verein2' AND saison='$aktuelle_saison' AND spieltag='$aktuelle_woche'"
                        
    mysql_query($query888) or die ("MySQL-Fehler mit $query888
    mysql_error());
                        
                        
    $query222 "UPDATE partien SET g_effizienz='0' WHERE g_auf_anzahl!='11' AND gastverein='$verein2' AND saison='$aktuelle_saison' AND spieltag='$aktuelle_woche'"
                        
    mysql_query($query222) or die ("MySQL-Fehler mit $query222
    mysql_error());
                        
                }
            
        }

    ?>
    <?php
        $sql123 
    "SELECT * FROM partien WHERE saison='$aktuelle_saison' AND spieltag='$aktuelle_woche' AND ergb_h='-1' AND ergb_g='-1'";
        
    $result123 mysql_query($sql123) OR die(mysql_error());
        echo 
    $row123['partieid'];
        while(
    $row123 mysql_fetch_assoc($result123)) {
        
                echo 
    $unterschied[$row123['partieid']] = $row123['h_effizienz']-$row123['g_effizienz'];                                                                                
            }
            
            
            foreach(
    $unterschied as $partieid => $differenz) {
            echo 
    $differenz;
            
            
    $query "UPDATE partien SET differenz=$differenz WHERE partieid='$partieid'"
            
    mysql_query($query) or die ("MySQL-Fehler mit $query
    mysql_error());
            
            }
                
                
        
        
    ?>


    </body>
    </html>

  • #2
    Kommentier mal die einzelnen Blöcke, ich weiß garnicht was du jeweils vor
    hast und nimm Zeitmessungen mittels microtime() vor. Dann siehst du wo
    dein Skript evtl. etwas länger braucht.

    http://de.php.net/microtime

    Kommentar


    • #3
      Du läufst in 4 foreach-schleifen alles durch und updatest für jeden einzelnen eintrag. wie wärs, wenn du einfach die IDs und die zugehörige effizienz sammelst.
      es ist ja davon auszugehen, dass der gleiche effizienzwert für viele spieler, torwartspiele etc. vorkommt. dann könntest du folgendes tun:
      effizienzwert: 1
      spielerIDs: 1, 3, 6, 9, 10
      Code:
      UPDATE spieler SET effizienz=1 WHERE spielerID in (1, 3, 6, 9, 10);
      Wäre nur ein Query anstatt 5. Spart bestimmt ne menge.

      Achso:
      Überleg mal ob du die Daten tatsächlich vorher ins Script laden musst. Ich denke du kannst da mit einem Query für jede Spielerart alles abhandeln. SQL bietet auch Rechenfunktionen an. Die Ganzen Updates wären also normalerweise mit 4 Querys bzw. 8 Querys abzuhandeln.
      nicht getestet:
      Code:
      UPDATE spieler SET effizienz=(torwart*15+kondition-(100-moti))-((torwart*15+kondition-(100-moti))/5) WHERE auf='TW' AND position='TW'
      UPDATE spieler SET effizienz=torwart*15+kondition-(100-moti) WHERE auf='TW' AND position='TW'

      Kommentar


      • #4
        wie du das mit dem einen statt fünf querys meinst ist mir nicht ganz klar,
        da ich ja jeden der 5 effizienzwerte brauch, da diese unterschiedlich sind,
        somit ist es schwer möglich das in einer foreach durchzugehen.

        Kommentar

        Lädt...
        X