我有一个包含100万行的CSV数据库,我正在使用以下Seeder将其输入到Laravel中:

public function run()
{
DB::table("terms")->truncate();

DB::beginTransaction();

$csvFile = fopen(base_path("database/terms.csv"), "r");

while (($data = fgetcsv($csvFile, 100, ",")) !== FALSE) {
  DB::table("terms")->insert([
      "serial" => $data['0'],
      "output" => $data['1']
  ]);
}

fclose($csvFile);

DB::commit();
}

以下是运行seeder 的迁移:

public function up()
{  
    Schema::create('items', function (Blueprint $table) {
        $table->mediumIncrements("id");
        $table->string("serial")->unique();
        $table->string("output");
    });

    $seeder = new ItemsSeeder();
    $seeder->run();
}

我不能使用分块,因为为数据创建一个Eloquent 的模型对我来说没有意义,所以我使用数据库事务来提高性能(这将摄取时间从一个小时减少到半个小时).这是一种很好的解决方案,只是它向表中额外添加了几百行.更奇怪的是,当我颠倒排序顺序来判断最后一行时,正如预期的那样,它的id1000000(id万),这表明没有添加任何额外的行.

这里发生了什么事?

推荐答案

是什么让你觉得你有多余的行数?

如果您使用"tool"中所示的行数,它可能会显示SHOW TABLE STATUS返回的近似行数.

SELECT COUNT(*) FROM terms会返还你期待的SELECT COUNT(*) FROM terms万吗?

Php相关问答推荐

在WooCommerce中执行一次银行电汇确认付款代码

在WooCommerce产品档案页面中显示产品销售百分比

Laravel集合块()方法

MULTI UPDATE Laravel为什么只能更新我的第一行

Regex:高级删除单行PHP注释

获取作者';在WordPress中使用PHP

如何在 apache Laragon - laravel 10 中允许方法 DELETE?

Shopware 6 插件:如何删除布尔配置并将其迁移到多选配置

为什么从一个页面到另一个页面都找不到 JQuery,因为它们使用相同的 twig 模板?

Filament PHP v3:在禁用的表单字段上,ID 不会写入数据库

如何为自定义帖子类型的自定义角色提供功能

从插件更改主题功能,function_exists 不起作用

Laravel Eloquent(where 子句)

如何通过额外的属性和本地化来使用 laravel 枚举

使用 PHP 正则表达式从仅包含具有现有顺序的顶级标签的 XML 文档中搜索和创建数组

为什么在解压缩具有混合字符串和 int 键的关联数组时出现错误消息无法使用位置参数...?

如何更改或管理Carbon时区,使其不会来回移动时钟

使用循环和引用而不是递归创建分层/父子数组

如何获取最后一条消息属于 Laravel 中特定用户的对话列表

将参数传递给 laravel 9 工厂