TBH 在大多数情况下 linq 或 SQL 并不是问题所在。您的性能将与您插入的数据量、表中当前的数据量以及您维护的索引有关。
其次,您是否需要对数据的多个列进行交叉检查和/或完整性检查。我曾经遇到过添加索引和重建表将插入时间从几分钟缩短到几毫秒的情况,这只是由于碎片错误和缺乏算法。
Linq 是一种为插入和修改逻辑生成 SQL 的有效方法。但是,您总是会得到以下模式:
- 从数据库中获取数据
- 使用 Linq 修改数据
- 提交对数据库的更改。
如果您有任何可以在插入中利用的逻辑,则可以使用集合逻辑在 SQL 中进行更新。例如,更新客户设置 KeyCustomer = 1,其中销售额 > 1000000。SQL Server 将处理这样的命令,比使用 ORM 处理的速度快 1000 倍。然而,正如@gbn 已经正确指出的那样,除非您拥有一支由强大的 SQL 编码员组成的团队,否则维护通常会在短期内胜过任何性能提升。
如果您必须插入大量记录,那么您真的应该通过 SSIS 查看批量加载和/或 ETL。这些 API 将使用更智能的算法并分批执行任何约束检查,而不是每次插入,这将为您带来出色的性能提升。但是管理 SSIS 包比单击应用程序中的按钮要多得多。这些都是您在构建应用程序时需要考虑的设计决策。