sombrero2007 Geschrieben 10. April 2007 Geschrieben 10. April 2007 Hi @all, ich experimentiere gerade mit mysql und php. Ich hab eine mini Datebank mit ein paar Tabellen zusammen gestellt. Jetzt habe ich mir eine PHP-Abfrage gebastelt, die auch funktioniert, aber die Abfrage dauert mindest 15 - 20 Sekunden und dasbei 6 Zeilen:eek Das ist der Code<?php // MySQL Zugangsdaten $db_host="192.168.0.168"; // Zielhost $db_user="dbtest"; // DatebankUser $db_pass="test"; // DatenbankUser Passwort $database="linuxsysteme"; // Datebankname function print_result_table($result){ // Tabellenanfang echo "<table border=\"1\">\n"; //echo "<table cellpadding="1" cellspacing="3" border="1">\n"; // 1. Tabellenzeile Anfang echo " <tr>\n"; // mysql_num_fields Liefert die Anzahl der Felder in einem Ergebnis // mit Felder sind die Namensfelder in der Tabelle gemeint for ($i = 0; $i < mysql_num_fields($result); $i++){ echo " <th>".mysql_field_name($result,$i)."</th>\n"; // mysql_field_name() liefert den Namen des Feldes, // der dem angegeben Feldindex entspricht. Also den Tabellennamen. } // 1. Tabellenzeile Ende echo " </tr>\n"; // Alle Ergebniszeilen durchgehen while ($row = mysql_fetch_row($result)){ // Tabellenzeilen-Anfang echo " <tr>\n"; // Alle Spalten durchgehen for ($i = 0; $i < mysql_num_fields($result); $i++){ echo " <td>$row[$i]</td>\n"; } // Tabellenzeilen-Ende echo " </tr>\n"; } // Tabellenende echo "</table>\n"; } // HAUPTPROGRAMM // Verbindung zur Datenbank aufbauen $db = mysql_connect($db_host,$db_user,$db_pass) OR die(mysql_error()); // Datebank auswählen mysql_select_db($database,$db) OR die(mysql_error()); /* HTML-Startcode ausgeben */ echo "<html>\n<body>\n"; /* SQL-Abfrage */ $result = mysql_query("SELECT * FROM kunde"); // Wenn die Fehlernummer != 0 ist, dann gab es einen Fehler => Fehlermeldung ausgeben if (mysql_errno() != 0){ echo mysql_error(); } // wenn es gab keine Fehler => Ergebnis ausgeben else { // Wie viele Datensätze wurden gefunden? // Bei 0 Meldung ausgeben if (mysql_num_rows($result) == 0){ echo "Keine Datensätze gefunden!"; } // sonst die Funktion aufrufen else{ print_result_table($result); } } /* HTML-Endcode ausgeben */ echo "</body>\n</html>\n"; ?>[/PHP] Liegt es vielleicht daran, dass die MySQL Datebank nicht auf der gleichen Maschine läuft wie der Webserver? Zitieren
Schiller256 Geschrieben 10. April 2007 Geschrieben 10. April 2007 Ein paar mehr Informationen wären hilfreich. Wo genau geht die Zeit verloren? Hast du das ResultSet erst nach 15 – 20 Sekunden oder ist die Verarbeitung in PHP danach so langsam. Was sagen die Log Files des MySQL Servers? Was hast du überhaupt an Systemen eingesetzt wie ist die Anbindung untereinander? Zitieren
sombrero2007 Geschrieben 10. April 2007 Autor Geschrieben 10. April 2007 Also, wenn ich die Seite aufrufe, dann wird die Datenbankabfrage gestartet und vom aufruf der Seite bis hin zur Anzeige (also zum aufbau der Tabelle) vergehen ca. 15 - 20 sec. Logfiles habe ich noch nicht ausgewertet. Ich hab einen SLES9 und einen SLES10 Server. Der SLES10 Server ist ein Rechner der bei mir unter dem Tisch steht und der SLES9 ist einer unserer Linux-Test rechner. Zitieren
Schiller256 Geschrieben 11. April 2007 Geschrieben 11. April 2007 Na jetzt wäre es doch schön zu wissen wo genau die Zeit verloren geht. Deshalb wäre ein Timer nicht schlecht der dir anzeigt wo wie viel Zeit auf der Strecke bleibt. Nach deiner Beschreibung steht der Rechner mit dem MySQL Server in deiner Unmittelbaren nähe. Ist der Datenbankserver sonst irgendwie besonders ausgelastet? Zitieren
Eupinkepank Geschrieben 11. April 2007 Geschrieben 11. April 2007 In Deiner Funktion gibt es 2 "FOR" Schleifen. In beiden Schleifen ist die Bedingung ein "$i < mysql_num_fields". Das bedeutet: Bei jedem Schleifendurchlauf wird diese MySQL Operation ausgeführt. Das ist sehr schlecht. Mach halt vorher ein "$felder=mysql_num_fields($result)" und nutze dann $felder als Bedingungwert. Dann wird das schon schneller. Zitieren
Monty82 Geschrieben 11. April 2007 Geschrieben 11. April 2007 Du kannst Dir den Funktionsaufruf auch ganz sparen, da im Array $row eh schon alle Felder der Abfrage enthalten sind. // Alle Spalten durchgehen foreach ($row as $key=>$val) { echo " <td>".$val."</td>\n"; } [/PHP] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.