循环遍历Yii2中的大量数据库行

时间:2016-05-12 23:33:07

标签: yii yii2

我正在使用Yii2,我的数据库服务器是MySQL。我需要扫描整个db表的每一行,搜索某些文本的出现次数。

这就是我想要的,但由于记录数量众多,我不确定我是否这样做,服务器不会耗尽内存或MySQL服务器不会消失:

$rows = Posts::find()->select('content')->all();
foreach($rows as $post) {
    // do some regex on $post['content']. no need to save it back to the table.
}

这是一个带有大型数据库的实时服务器。我必须动手做,不能取下服务器进行备份和恢复!

这会有用吗?有没有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:6)

Yii2指南中的以下两个Accessing Data小节讨论了您的问题:

  • 检索数组中的数据

    use yii\helpers\ArrayHelper;
    $contents = ArrayHelper::getColumn(
      Post::find()->asArray()->all(),
      'content'
    );
    foreach ($contents as $content) {
    
    }
    
  • 批量检索数据

    // fetch 10 rows at a time
    foreach(Posts::find()->select('content')->each(10) as $post) {
        // ...
    }
    

这两种方法都可以降低内存成本。