当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《mysqlphp:在mysql数据库之间切换很慢》经验,为你挑选了1个好方法。

在我连接到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

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

提前致谢.



1> ChrisInEdmon..:

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

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

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

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有