这些查询可以变成REPLACE INTO吗?

时间:2010-07-14 22:50:40

标签: php mysql

$sql2 = "SELECT `id` FROM `saa_game` WHERE `domain_id` = '".$row['id']."' AND `unique_id` = '".s($oGame->unique_id)."' AND `year` = '".$iYear."' AND `month` = '".$iMonth."' LIMIT 1";
$result2 = mysql_query($sql2) or die(mail('rpaiva@golevel.com','SAA Gather Error',mysql_error()));
if(mysql_num_rows($result2) == 1)
{
    $row = mysql_fetch_assoc($result2);
    $sql3 = "UPDATE `saa_game` SET `plays` = '".s($oGame->plays)."' WHERE `id` = '".$row['id']."' LIMIT 1";
    $result3 = mysql_query($sql3) or die(mail('email@sample.com','SAA Gather Error',mysql_error()));
}
else
{
    $sql3 = "INSERT INTO `saa_game` (`domain_id`,`type`,`source`,`unique_id`,`plays`,`year`,`month`) VALUES ('".$row['id']."','".s($oGame->type)."','".s($oGame->source)."','".s($oGame->unique_id)."','".s($oGame->plays)."','".$iYear."','".$iMonth."')";
    $result3 = mysql_query($sql3) or die(mail('email@sample.com','SAA Gather Error',mysql_error()));
}

我每隔10分钟就在cron作业的单页加载上运行40,000次这组查询。这需要很长时间才能进入下一个cron工作。如果我可以将其减少为一个查询而不是两个,那就太好了。 (只要实际存在性能差异)

1 个答案:

答案 0 :(得分:2)

如果select命中所有正确的索引,则不会有性能提升。事实上,它可能更糟! MySQL的REPLACE INTO实现为删除,然后插入!

考虑使用MySQL的INSERT INTO ... ON DUPLICATE KEY UPDATE

请记住,这两个选项都是MySQL独有的。