mysql php:在mysql数据库之间切换很慢
问题描述:
在我连接到mysql的php脚本中,我必须在同一个脚本中查询2个数据库以获取不同的信息。更具体地说,一个数据库中的传真存档和另一个数据库中的传真用户。mysql php:在mysql数据库之间切换很慢
在我的代码我查询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
我猜每个用户数据库之间的切换导致的缓慢。无论如何,我可以提高处理速度?
在此先感谢。
答
你有几个问题。首先,你的函数getUserarchive一直拉回所有的行。看起来你忘了限制你的SQL只有一个特定的用户ID。这是您速度问题的重要原因。
另一个选择是传入所有你感兴趣的用户标识。将SQL重写为SELECT发送,接收FROM FROM faxarchivetable WHERE userid IN(...),这意味着你将有一个选择将所有信息从您的faxarchivetable,而不是每个用户ID一个。
最后,如果这两个数据库是相同的MySQL服务器上,你可能只是做一个选择中的所有信息来拉: SELECT Faxusers.faxuserstable.userid,发送,收到Faxusers.faxuserstable JOIN Faxarchive.faxarchivetable ON Faxusers.faxuserstable.userid = Faxarchive.faxarchivetable.userid
答
您是否知道可以通过限定表名来查询不同数据库中的表?
举例来说,我觉得你可以在一个SQL查询您的所有信息是这样的:
SELECT sent, received
FROM Faxarchive.faxarchivetable
WHERE userid IN (SELECT DISTINCT userid FROM Faxusers.faxuserstable);
哦,这是同一个点ChrisInEdmonton做。我没有注意到他的答案。
oops ..忘记在getuserarchive()函数中包含where子句。 – phill 2008-11-21 17:38:20
我不知道mysql可以做子查询..我会试试..谢谢! – phill 2008-11-21 17:40:19