php - MySQL PHP : switching between mysql databases is slow

标签 php mysql sql

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

在我的代码中,我查询 faxusers,然后为每个用户查询 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

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

提前致谢。

最佳答案

你有几个问题。首先,您的函数 getUserarchive 始终拉回所有行。看起来您忘记了将您的 SQL 限制为仅特定的用户 ID。这是造成速度问题的主要原因。

另一种选择是传递您感兴趣的所有用户 ID。将 SQL 重写为 SELECT sent, received FROM faxarchivetable WHERE userid IN (...),这意味着您可以选择从中提取所有信息您的传真存档表,而不是每个用户 ID 一个。

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

关于php - MySQL PHP : switching between mysql databases is slow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/309402/

相关文章:

php - 如何使用 jQuery.parseJSON 绕过换行符

php - 使用 jquery 获取 php 表中元素的 .html() ,其中 mysql 行为 "echoed"- 仅获取第一个表中的元素

php - CakePHP 将 html/数据导出为 PowerPoint 格式

mysql - 如果缓冲区不存在,请将名称+代码添加到缓冲区中?

sql - 分组集、汇总但具有多列

mysql - 如何在 MySQL 的 utf-8 列中识别语言

php - 加快 PHP Imagick 库 PDF -> PNG 转换(20 秒!)

java - 数据源拒绝建立连接,来自服务器 : "Too many connections" 的消息

mysql - 固定长度列最有效的数据类型

mysql - 如果条件匹配,如何循环遍历 MySQL 表中的每一行并获取行