SQL与LINQ性能
我们目前有一个自制的实体框架,它依赖于一个独立于数据库的ORM 我必须构建一个软件,在数据库中批量加载大约150个excel模板的元数据(包含单元格位置、单元格类型、格式等信息) 我会操作SQL与LINQ性能,sql,performance,linq,Sql,Performance,Linq,我们目前有一个自制的实体框架,它依赖于一个独立于数据库的ORM 我必须构建一个软件,在数据库中批量加载大约150个excel模板的元数据(包含单元格位置、单元格类型、格式等信息) 我会操作 通过SQL批处理(速度更快但交互更少) 通过在内存中构建对象,使用LINQ查询处理它们以进行各种完整性检查,然后将修改提交给数据库 我知道SQL绝对更快,但我知道快多少? 具体来说,SQL查询比LINQ查询快多少(假设所有需要的数据都已通过ORM加载到内存中)?这里您可以对各种ORM和SqlDataRea
- 通过SQL批处理(速度更快但交互更少)
- 通过在内存中构建对象,使用LINQ查询处理它们以进行各种完整性检查,然后将修改提交给数据库
具体来说,SQL查询比LINQ查询快多少(假设所有需要的数据都已通过ORM加载到内存中)?这里您可以对各种ORM和
SqlDataReader
:(性能部分)进行一些性能比较。值得一提的是,编译LINQ查询可以显著提高性能:TBH在大多数情况下,LINQ或SQL并不是问题所在。您的性能将与插入的数据量、表中当前的数据量以及维护的索引有关
其次,您是否需要跨数据的多个列执行交叉检查和/或完整性检查。我曾经遇到过这样的情况:添加索引和重建表将插入时间从几分钟减少到几毫秒,这仅仅是因为碎片化和缺乏算法
Linq是为插入和修改逻辑生成SQL的有效方法。但是,您将始终以以下模式结束:
如果您必须插入大量记录,那么您应该真正考虑通过SSI批量加载和/或ETL。这些API将使用更智能的算法,成批执行任何约束检查,而不是每次插入,这将为您提供出色的性能提升。但管理SSIS包远比单击应用程序中的按钮要复杂得多。这些都是你设计应用程序时需要考虑的所有设计决策。与你的问题有点关系:速度是否重要?在几乎所有情况下,易维护性都应该胜过绝对性能。特别是在执行连接和稍微复杂的查询时,我想SQL的返回速度应该是毫秒,而LINQ不是。。。SQL有索引,LINQ没有。@gbn是的,速度很重要。这是一个非常大的负载过程,最坏情况下应该在10-20分钟内结束@Teejay:如果你已经有了非常大的数据集,试着使用它,它会更快。谢谢你的回答。似乎您的文章更多地引用了我没有使用的LINQ2SQL。我问的是当数据已经加载时的纯查询性能。你可以说你也需要一个由强大的Linq开发人员组成的团队——或者他们可能会编写一些糟糕的Linq查询。寓意是:如果你在做数据库工作,就学习SQL。Linq是一种方便,而不是替代品。