mySQLi插入脚本永远

时间:2014-01-08 19:26:47

标签: php mysql sql mysqli

这基本上是存储在 PHP 脚本

中的内容
$query = $db->query("
SELECT *
FROM `media`
WHERE `id` > '$last_id'
AND `accounts_used` != ''
ORDER BY `id` ASC
LIMIT 100
");

foreach($query['results'] as $row) {
    $last_id = $row['id'];
    $accounts_used = explode(", ",$row['accounts_used']);
    $db->connect();
    foreach($accounts_used as $liked_account) {
        $account_id = str_replace(" ","",$liked_account);
        $media_id = $row['id'];
        $insert_array = array(
            "account_id" => $account_id,
            "media_id" => $media_id,
            "timesent" => "0000-00-00 00:00:00"
        );
        $db->insert("media_likes", $insert_array);
    }
    $db->disconnect();
}

$row['accounts_used']的一个例子是这样的

61519, 65894, 63561, 61718, 63567, 66924, 66979, 66972, 66637, 66295, 66842, 64775, 51898, 64631, 65044, 67226, 67582, 66861, 51543, 61564, 65597, 66863

平均accounts_used行包含 1000/2000 唯一ID,用逗号分隔,我想根据逗号进行爆炸,并将每个ID插入另一个表。

media_id包含一个大约5位左右的整数值,account_id大致相同

此脚本大约需要3分钟才能完成,有哪些具体方法可以改善这些功能?或者更快的方法呢?

2 个答案:

答案 0 :(得分:5)

我能看到的一些事情可能有助于取消比赛:

1 - 您在处理的每一行数据(不是)之后打开和关闭数据库连接

2 - 您可以使用预准备语句让mysql连接“预编译”您的插入语句

3 - 在插入周围使用事务,这样您的索引只会更新一次

答案 1 :(得分:1)

您可能有一个包含大量行的表,因此问题不在于您自己插入的方式,而在于优化表。 如果是这种情况,您可以尝试更改索引和外键,这可能会提高速度。 您也可以尝试使用内嵌插入来查看它是否有所改进。