我正在运行一个PHP脚本,它基本上试图从MYSQL数据库中找到匹配的名称,然后将相同的号码分配给名称相同的记录。
我的问题是记录数量约为150万。该脚本每次总是运行大约14个小时并发出此错误:mysql_query无法在xx行xxx上保存结果集。和phpmyadmin给出了这个错误#2008 in memeory
这是我的PHP代码
mysql_query("SET SQL_BIG_TABLES=1");
$res = mysql_query("SELECT company_name, country, id FROM proj")
or die (mysql_error());
while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
$res1 = mysql_query("SELECT company_name, id FROM proj WHERE country='$row[1]'"+
"AND id<>'$row[2]'") or die ("here".mysql_error().mysql_errno());
while ($row1 = mysql_fetch_array($res1, MYSQL_NUM)) {
//My calculations here
}
}
答案 0 :(得分:5)
确定。您的查询非常低效。你在评论中说有150万行。
换句话说,不仅效率极低 - 这绝对是荒谬的。鉴于您似乎只想按国家/地区获取行,为什么不执行以下操作:
$sql1 = "SELECT DISTINCT country FROM proj";
$res1 = mysql_query($sql1) or die(mysql_error());
while($row1 = mysql_fetch_associ($res1)) {
$country = $row1['country'];
$escaped_country = mysql_real_escape_string($country);
$sql2 = "SELECT company_name, id FROM proj WHERE country='$country'";
$res2 = mysql_query($sql2) or die(mysql_error());
while ($row2 = mysql_fetch_assoc($res2)) {
... calculations ...
}
}
这只能从数据库中获取150万条+国家记录,远远低于您的版本2.3万亿。