如何从大量数据创建数组?

时间:2018-05-08 08:45:18

标签: php mysql arrays performance var-dump

我从mySQL数据库中选择了大量数据:

 $sql = "SELECT * FROM data WHERE id = ?";  
 $q = $pdo->prepare($sql);
 $q->execute([$id]);
 $array = $q->fetchAll(PDO::FETCH_ASSOC);

 var_dump($array);

我希望将这些数据存储到一个数组中,然后在循环中使用此数组。我现在的问题是,我有如此庞大的数据量,数组正在加载和加载,我的系统不堪重负。 有没有办法创建一个包含大量数据并具有更好性能的数组?

4 个答案:

答案 0 :(得分:1)

fetchAll()函数将整个记录映射到变量。

每次迭代映射一行将会快得多

$q->execute([$id]);

$i = 0;
while ($row = $q->fetch()) {
    // do something with $row
    $i++;
}

答案 1 :(得分:1)

请使用获取功能而不是像下面这样获取所有内容:

while ($arr = $stmt->fetch()){
   // do_other_stuff(); 
}

这将减少系统负载。

Please see this

答案 2 :(得分:1)

我目前正处理12,000行并将其编码为JSON数组,在我看来这对我来说效果最佳。

PageTwo.__init__()

然后回显(或在我的情况下回显json_encode)它。

答案 3 :(得分:1)

要考虑的主要事项是:

  1. 此表数据是否会进一步增加? (已经很大了:))
  2. 不建议/建议每次循环500k记录。它肯定会影响速度/性能。

    我建议以下选项:

    1. 在表格中放置一个字段以标识最高文件夹(类似于排序顺序字段) - 在需要时正确更新。这样我们就可以先获取最高文件夹,如果有一个字段来标识父文件,那么您可以轻松地构建一个树。
    2. 考虑一个表,用于将具有外键的最高文件夹存储到其主表中。相应地更新,以便您可以轻松识别最高文件夹。
    3. PS:您可以考虑使用CRON处理数据并在需要时更新排序顺序。