C# 具有主子关系的PGSQL中的大容量插入

C# 具有主子关系的PGSQL中的大容量插入,c#,postgresql,C#,Postgresql,我正在将数据从旧模式迁移到更新的模式(PG作为新数据库) 我正在使用C#自动化这个过程 这是一个显示原始数据的屏幕截图(要理解的示例) 根据更新的模式,此源数据需要分为两个表Vehicles和PartPricing。 品牌、型号和年份的唯一组合将插入到车辆中,并与唯一Id链接。 然后,零件和零件价格将插入到零件定价表中,并需要与车辆ID链接。(VehicleId指车辆Id表) 下面的屏幕显示了预期的输出。 我采用的方法是- 获取品牌、型号和年份的唯一列表,生成批量插入查询并执行 获取所有插入

我正在将数据从旧模式迁移到更新的模式(PG作为新数据库)

我正在使用C#自动化这个过程

这是一个显示原始数据的屏幕截图(要理解的示例)

根据更新的模式,此源数据需要分为两个表
Vehicles
PartPricing
。 品牌、型号和年份的唯一组合将插入到
车辆中
,并与唯一Id链接。 然后,零件和零件价格将插入到
零件定价
表中,并需要与
车辆ID
链接。(VehicleId指车辆Id表)

下面的屏幕显示了预期的输出。

我采用的方法是-

  • 获取品牌、型号和年份的唯一列表,生成批量插入查询并执行
  • 获取所有插入的车辆并将其缓存到集合中
  • 现在循环源代码中的每个行项目
  • 根据品牌、型号和年份查找VehicleId(从集合中查找,而不是从数据库中查找)
  • 为零件定价准备insert语句
  • 循环完成后,执行PartPricing的批量插入查询
  • 虽然车辆数据插入速度非常快,但由于查找原因,为零件定价准备批量插入需要花费大量时间

    有没有更好的办法来解决这个问题?请建议

    仅供参考,当我说批量插入时,它如下-

    Insert into Vehicles(Make, Model, Year) values
    ('Honda', 'City', 2010),
    ('Honda', 'City', 2011),
    ('Hyundai', 'Accent', 2011),
    ....
    ('Toyota', 'Corolla', 2015);
    

    可能缺少索引:
    创建车辆索引(品牌、型号、年份)创建数据库时,在内存量和检索时间之间进行权衡。您的新方法占用内存,因为您不会重复在多辆车上使用的零件,但检索数据需要更多时间,因为您必须连接两个表。我更新了第4点,只是为了明确我不是在查询数据库。而是将所有车辆数据缓存到内存中(通过收集),然后使用LINQ查找车辆id。