mysql php:在mysql数据库之间切换很慢

时间:2008-11-21 16:40:41

标签: php mysql sql

在连接到mysql的php脚本中,我必须在同一个脚本中查询2个数据库以获取不同的信息。更具体地说,一个数据库中的Faxarchives和另一个数据库中的Faxusers。

在我的代码中,我查询faxusers然后foreach用户,我查询Faxarchives以获取用户历史记录。

我可能会这样做:

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

我猜测每个用户的数据库之间的切换导致了缓慢。无论如何我怎样才能提高处理速度?

提前感谢。

2 个答案:

答案 0 :(得分:8)

你有几个问题。首先,你的函数getUserarchive会一直拉回所有行。您似乎忘记将SQL限制为仅限特定用户标识。这是你速度问题的一个重要原因。

另一种选择是传入你感兴趣的所有用户ID。重写SQL为SELECT发送,接收FROM faxarchivetable WHERE userid IN(...),这意味着你有一个选择从中撤回所有信息您的faxarchivetable,而不是每个用户ID一个。

最后,如果两个数据库都在同一个MySQL服务器上,您只需执行一次选择即可获取所有信息: SELECT Faxusers.faxuserstable.userid,已发送,已收到FROM Faxusers.faxuserstable JOIN Faxarchive.faxarchivetable ON Faxusers.faxuserstable.userid = Faxarchive.faxarchivetable.userid

答案 1 :(得分:0)

您是否知道可以通过限定表名来查询不同数据库中的表?

例如,我认为您可以在单个SQL查询中获取所有信息,如下所示:

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

哦,这与ChrisInEdmonton的观点相同。我没有注意到他的答案。