Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mySQLi插入的脚本将永远使用_Php_Mysql_Sql_Mysqli - Fatal编程技术网

Php mySQLi插入的脚本将永远使用

Php mySQLi插入的脚本将永远使用,php,mysql,sql,mysqli,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(", ",

下面是我的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\u used']
的示例如下

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

平均而言,所使用的
accounts\u
行包含大约1000/2000个用逗号分隔的唯一ID,我想根据逗号分解并将每个ID插入另一个表中

media\u id
包含一个大约5位数的整数值,
account\u id
大致相同


这个脚本大约需要3分钟才能完成,有什么具体的方法来改进这些功能吗?或者是一种更快的方法?

您可能有一个包含很多行的表,因此问题不在于插入本身的方式,而在于表的优化。 如果是这种情况,您可以尝试更改索引和foring键,这可能会提高速度。
您还可以尝试在线插入,看看它是否有所改进。

可能您的表有很多行,因此问题不在于插入本身的方式,而在于优化表。 如果是这种情况,您可以尝试更改索引和foring键,这可能会提高速度。
此外,您还可以尝试在线插入,看看它是否有所改进。

我可以看到一些可能有助于脱离实际的东西:

1-在处理每一行数据后,您都要打开和关闭数据库连接(不要)

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


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

我可以看到一些可能有帮助的事情:

1-在处理每一行数据后,您都要打开和关闭数据库连接(不要)

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


3-围绕插入使用事务,以便索引只更新一次

“用逗号分隔的唯一ID”,arggggg normalize!如果要插入很多行,则需要使用事务。在每次插入之后,需要更新索引。在事务中,它只会在提交后执行该操作。这应该会加快速度。SELECT*是一个真正的数据库杀手。当使用
mysqli
时,您应该使用参数化查询,并将用户数据添加到查询中。避免使用字符串插值来完成此操作。“由逗号分隔的唯一ID”,arggggg规范化!如果要插入很多行,则需要使用事务。在每次插入之后,需要更新索引。在事务中,它只会在提交后执行该操作。这应该会加快速度。SELECT*是一个真正的数据库杀手。当使用
mysqli
时,您应该使用参数化查询,并将用户数据添加到查询中。避免使用字符串插值来完成此操作。非常感谢,现在只需6秒钟即可完成使用事务并将我的连接/断开连接置于
foreach
循环之外。非常感谢,现在只需6秒钟即可完成使用事务并将我的连接/断开连接置于
foreach
循环之外