2 Stimmen

mysql php : Umschalten zwischen mysql-Datenbanken ist langsam

In meinem PHP-Skript, das sich mit Mysql verbindet, muss ich 2 Datenbanken im selben Skript abfragen, um verschiedene Informationen zu erhalten. Genauer gesagt Faxarchive in einer Datenbank und Faxuser in der anderen.

In meinem Code frage ich faxusers ab und dann für jeden Benutzer die Faxarchive, um die Benutzerhistorie zu erhalten.

Ich könnte etwas tun wie:

function getUserarchive( $userid) { 
  $out= ""; 
  $dbname = 'Faxarchive';
  $db = mysql_select_db($dbname);
  $sql = "select sent, received from faxarchivetable where userid = '" . $userid . "'"; 

  if ( $rs = mysql_query($sql) { 
    while ($row = mysql_fetch_array($rs) ) { 
      $out = $row['sent'] . " " . $row['received']; 
    }//end while 
  }//end if query

  return ($out); 
}//end function 

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');

$dbname = 'Faxusers';
$db = mysql_select_db($dbname);
$sql="select distinct userid from faxuserstable"; 
if ( $rs = mysql_query($sql) { 
  while ($row = mysql_fetch_array($rs) ) { 
    $out = $row['userid'] . ":" . getuserarchive($row['userid']); 
  }//end while 
}//end if query

Ich vermute, dass das Umschalten zwischen den Datenbanken für jeden Benutzer die Ursache für die Langsamkeit ist. Wie kann ich trotzdem die Geschwindigkeit der Verarbeitung verbessern?

vielen Dank im Voraus.

8voto

ChrisInEdmonton Punkte 4270

Sie haben mehrere Probleme. Erstens, Ihre Funktion, getUserarchive, zieht alle Zeilen die ganze Zeit zurück. Sieht aus, als hätten Sie vergessen, Ihr SQL auf eine bestimmte Benutzerkennung zu beschränken. Das ist eine der Hauptursachen für Ihre Geschwindigkeitsprobleme.

Eine andere Möglichkeit wäre es, alle Userids, die Sie interessieren, einzugeben. Schreiben Sie den SQL-Code in SELECT sent, received FROM faxarchivetable WHERE userid IN (...) um, was bedeutet, dass Sie einen Select haben, um alle Informationen aus Ihrer Faxarchivtabelle abzurufen, anstatt einen für jede userid.

Wenn sich beide Datenbanken auf demselben MySQL-Server befinden, können Sie mit einem einzigen Select alle Informationen abrufen: SELECT Faxusers.faxuserstable.userid, sent, received FROM Faxusers.faxuserstable JOIN Faxarchive.faxarchivetable ON Faxusers.faxuserstable.userid = Faxarchive.faxarchivetable.userid

0voto

Bill Karwin Punkte 493880

Ist Ihnen bekannt, dass Sie Tabellen in verschiedenen Datenbanken abfragen können, indem Sie den Tabellennamen qualifizieren?

Ich denke, Sie können zum Beispiel alle Ihre Informationen in einer einzigen SQL-Abfrage wie dieser erhalten:

SELECT sent, received 
FROM Faxarchive.faxarchivetable
WHERE userid IN ( SELECT DISTINCT userid FROM Faxusers.faxuserstable );

Oh, das ist derselbe Punkt, den ChrisInEdmonton anspricht. Ich habe seine Antwort nicht bemerkt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X