繁体   English   中英

有条件地更新具有数百万条记录的巨大表

[英]Conditionally update a huge table having millions of records

我有一个巨大的mysql 2表,每个表包含超过一百万个数据。 目前,我必须将一个表中的某些列合并到另一个表中,然后有条件地更新第一个表。

这是一个示例代码,向您展示我的意思

目前,我正在使用Laravel 4.1来执行查询。 并分块更新数据。 不幸的是,如果我尝试使用此方法更新20个以上的条目,则服务器将崩溃。

$records = Record::where('MINE_ID','!=','1')->skip($skip)->take($take)->get();
//Equivalent to "SELECT * FROM records LIMIT 20 OFFSET 20"

        foreach ($records as $record) {

                $id = $record->room_id;
                $lat = $record->lat;
                $lng = $record->lng;

                $update = DB::table('accidents')
                            ->where('room_number', $id)
                            ->update(array(
                                'LATITUDE' => $lat,
                                'LONGITUDE' => $lng
                                ));

        }

MySQL表引擎是innoDB。 有更快,更轻松的方法来做到这一点吗?

任何帮助将非常感激。

其他信息我已经向所有表添加了索引。 我听说删除索引有帮助吗? 而且,它们是BIGINT。 它会影响性能吗?

您可能要考虑先将完整数据作为临时表加载到表中,然后删除原始数据,将临时表重命名为原始表的名称。 它应该更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM