gpt4 book ai didi

php - 将mysql表传输到数组

转载 作者:行者123 更新时间:2023-11-29 21:43:32 25 4
gpt4 key购买 nike

我必须获取一个包含数百万条记录的表,其中有两列 - idname,对于每个名称进行爆炸操作,然后每个爆炸元素与其 ID 一起保存到文件中。 id-keyword 对必须是唯一的。

最快、最节省内存的方法是什么?

我一直在思考这样的事情:

$query = $pdo -> prepare('SELECT id, name FROM table');
$query -> execute();

$time = microtime(true);

if (file_exists('test.txt')) {
unlink('test.txt');
}
$fh = fopen('test.txt', 'a');
while ($result = $query -> fetch()) {
$tokens = explode(" ", $result['name']);
foreach ($tokens as $token) {
fwrite($fh, $result['id'] . ' ' . $token . PHP_EOL);
}
}
fclose($fh);

echo microtime(true) - $time;
  1. 但是需要超过 15 秒才能实现这一点,这太长了,而且数组不是唯一的。
  2. 我还可以创建一个以单词为键的数组,其中包含 id 数组作为键,这可以解决唯一性问题,但整个结构肯定太大,无法在合理的时间内装入内存。<
  3. 我可以创建最多包含几条记录的数组,并时不时地执行 fwrite,但话又说回来,行不会是唯一的。

我不想在数据库层执行此操作 - 数据库逻辑越少越好,而且我也不想执行更繁重的数据库操作。

我还能怎么做?

最佳答案

通过将结果以 block 的形式附加到字符串中,并且偶尔将其写入文件,清除该字符串,我能够将速度加快到 1,5s

    $query = $pdo -> prepare('SELECT id, name FROM table');
$query -> execute();
$fh = fopen('test.txt', 'a');
$str = '';
while ($result = $query -> fetch()) {
$tokens = array_unique(explode(" ", $result['name']));
foreach ($tokens as $token) {
$str .= $result['id'] . " " . $token . "\n";
}
if (strlen($str) > 5000) {
fwrite($fh, $str);
$str = '';
}
}
fclose($fh);

太频繁的fwrite,或者太长的字符串,会使执行时间更长,我想这取决于我的内存速度。

关于php - 将mysql表传输到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275431/

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