php - 有条件地更新拥有数百万条记录的巨大表

标签 php mysql database laravel-4

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

这里有一个示例代码来向您展示我的意思

目前我正在使用 Laravel 4.1 来执行查询。并按 block 更新数据。不幸的是,如果我尝试在此方法中更新超过 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。会影响性能吗?

最佳答案

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

关于php - 有条件地更新拥有数百万条记录的巨大表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22165354/

相关文章:

android - SQLite 数据库最大存储容量

php - Android:网络托管公司对 WhatsApp 等应用程序的推荐

php - 检测api访问密码保护区

PHP Cookie 销毁不起作用,我做错了什么?

PHP 7 : Redis extenstion doesn't load (PHP Startup: Unable to load dynamic library)

php - 将日期格式转换为mysql时间戳

mysql - 如何使用bat文件记录MySQL错误

sql - 为什么这个简单的 SQL 语句不起作用?

MySQL:在 MySQL 中存储全年(365 个元素)的最高效方法是什么?

sql - 在 SQL Server 中删除记录后重置标识种子