我正在使用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.
}
Run Code Online (Sandbox Code Playgroud)
它是一个带有大型数据库的实时服务器.我必须动手做,不能取下服务器进行备份和恢复!
这会有用吗?有没有更好的方法来做到这一点?
在Yii2指南中访问数据的以下两个小节已经讨论了您的问题:
在数组中检索数据
use yii\helpers\ArrayHelper;
$contents = ArrayHelper::getColumn(
Post::find()->asArray()->all(),
'content'
);
foreach ($contents as $content) {
}
Run Code Online (Sandbox Code Playgroud)批量检索数据
// fetch 10 rows at a time
foreach(Posts::find()->select('content')->each(10) as $post) {
// ...
}
Run Code Online (Sandbox Code Playgroud)两种方法都可以降低内存成本.