gpt4 book ai didi

php - 将数据从一个 mysql 表复制到另一个表时出现内存问题

转载 作者:行者123 更新时间:2023-11-29 06:48:48 24 4
gpt4 key购买 nike

我需要获取、转换并将 4 000 000 行插入到另一个表中。不用说,在 300 000~ 条目之后,内存耗尽错误开始出现。在每个循环之后,分配的内存恰好增加 160 字节。我知道使用 mysql_unbuffered_query() 是可能的,尽管它迫使我在执行另一个查询之前获取所有结果行,这最终再次出现内存耗尽错误。那么,在单次运行中执行此操作的最佳方法是什么?

mysql_connect($host, $user, $password);
mysql_select_db($db);

$getOldData = mysql_query("
SELECT *
FROM players_online
ORDER by id ASC
");
$numRows = mysql_num_rows($getOldData);

for ($i=0; $i < $numRows; $i++) {
$oldData = mysql_fetch_assoc($getOldData);
$hour = explode(':', $oldData['hour']);
$quarters = $hour[0] * 4 + $hour[1] / 15;

$update = mysql_query("
INSERT INTO players_online_2 (world_id, players_online, quarters_past_midnight, date)
VALUES (
'".$oldData['world_id']."',
'".$oldData['players_online']."',
'".$quarters."',
'".$oldData['date']."'
)
ON DUPLICATE KEY UPDATE
world_id='".$oldData['world_id']."',
players_online='".$oldData['players_online']."',
quarters_past_midnight='".$quarters."',
date='".$oldData['date']."'
");

if (mysql_error()) {
echo mysql_error();
die();
}

echo memory_get_usage().PHP_EOL;

最佳答案

MySQL Workbench会让你export旧数据库和import它进入新位置。

尽管如此,如果您想在 PHP 中执行此操作,您可能不应该一次性返回整个表。您可以使用 LIMITOFFSET 将查询分成多页,然后一次执行一页。像这样:

for ($i = 0; $i < $Limit; $i++)
{
// SELECT * FROM players_online ORDER by id ASC LIMIT 1000 OFFSET ' . $i
}

关于php - 将数据从一个 mysql 表复制到另一个表时出现内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com