我们目前有一个自制的实体框架,它依赖于一个独立于数据库的ORM。
我必须构建一个软件,在DB中批量加载大约150个excel模板的元数据(包含有关单元格位置,单元格类型,格式等信息)。
我可以操作
通过SQL批处理(更快但交互性更低)
通过在内存中构建对象,使用LINQ查询处理它们以进行各种完整性检查,然后对数据库提交修改
我知道SQL绝对更快,但我知道...... 它的速度有多快?
详细地说,SQL查询比LINQ查询更快(假设所有需要的数据已经由ORM加载到内存中)?
答案 0 :(得分:11)
TBH在大多数情况下linq或SQL都不是问题所在。您的性能将与您插入的数据量,表中当前数据量以及您维护的索引有关。
其次,您是否需要跨数据的多个列进行交叉检查和/或完整性检查。我有这样的情况:添加索引和重建表已经将插入时间从几分钟缩短到几毫秒,这只是由于碎片错误和缺乏算法。
Linq是一种为插入和修改逻辑生成SQL的有效方法。但是你总会得到这样的模式:
如果您有任何可以在插入中利用的逻辑,则可以使用set logic在SQL中进行更新。例如。更新客户设置KeyCustomer = 1其中Sales> 1000000.SQL Server将处理这样一个命令,比你用ORM做的快1000倍。然而,正如@gbn已经正确指出的那样,除非你有一个充满强大SQL编码器的团队,否则维护工作通常会在短期内胜过任何高管增益。
如果您必须插入大量记录,那么您应该通过SSIS查看批量加载和/或ETL。这些API将使用更智能的算法并批量执行任何约束检查,而不是每个插入,这将为您提供出色的性能提升。但是,管理SSIS包比单击应用程序中的按钮要多得多。这些都是您在构建应用程序时需要考虑的设计决策。
答案 1 :(得分:1)
您可以在此处对各种ORM和SqlDataReader
:http://code.google.com/p/dapper-dot-net/(效果部分)进行一些效果比较。值得一提的是,编译LINQ查询可以显着提高性能:http://www.codeproject.com/Articles/38174/How-to-improve-your-LINQ-query-performance-by-5-X