Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL与LINQ性能_Sql_Performance_Linq - Fatal编程技术网

SQL与LINQ性能

SQL与LINQ性能,sql,performance,linq,Sql,Performance,Linq,我们目前有一个自制的实体框架,它依赖于一个独立于数据库的ORM 我必须构建一个软件,在数据库中批量加载大约150个excel模板的元数据(包含单元格位置、单元格类型、格式等信息) 我会操作 通过SQL批处理(速度更快但交互更少) 通过在内存中构建对象,使用LINQ查询处理它们以进行各种完整性检查,然后将修改提交给数据库 我知道SQL绝对更快,但我知道快多少? 具体来说,SQL查询比LINQ查询快多少(假设所有需要的数据都已通过ORM加载到内存中)?这里您可以对各种ORM和SqlDataRea

我们目前有一个自制的实体框架,它依赖于一个独立于数据库的ORM

我必须构建一个软件,在数据库中批量加载大约150个excel模板的元数据(包含单元格位置、单元格类型、格式等信息)

我会操作

  • 通过SQL批处理(速度更快但交互更少)

  • 通过在内存中构建对象,使用LINQ查询处理它们以进行各种完整性检查,然后将修改提交给数据库

我知道SQL绝对更快,但我知道快多少?


具体来说,SQL查询比LINQ查询快多少(假设所有需要的数据都已通过ORM加载到内存中)?

这里您可以对各种ORM和
SqlDataReader
:(性能部分)进行一些性能比较。值得一提的是,编译LINQ查询可以显著提高性能:

TBH在大多数情况下,LINQ或SQL并不是问题所在。您的性能将与插入的数据量、表中当前的数据量以及维护的索引有关

其次,您是否需要跨数据的多个列执行交叉检查和/或完整性检查。我曾经遇到过这样的情况:添加索引和重建表将插入时间从几分钟减少到几毫秒,这仅仅是因为碎片化和缺乏算法

Linq是为插入和修改逻辑生成SQL的有效方法。但是,您将始终以以下模式结束:

  • 从数据库中获取数据
  • 使用Linq修改数据
  • 将更改提交到数据库
  • 如果您有任何可以在插入中利用的逻辑,则可以使用set logic在SQL中进行更新。例如,当销售额>1000000时,更新客户设置KeyCustomer=1。SQL Server处理这样的命令的速度比使用ORM处理命令的速度快1000倍。然而,正如@gbn已经正确指出的那样,除非您有一个由强大的SQL编码人员组成的团队,否则维护通常会在短期内胜过任何性能增益


    如果您必须插入大量记录,那么您应该真正考虑通过SSI批量加载和/或ETL。这些API将使用更智能的算法,成批执行任何约束检查,而不是每次插入,这将为您提供出色的性能提升。但管理SSIS包远比单击应用程序中的按钮要复杂得多。这些都是你设计应用程序时需要考虑的所有设计决策。

    与你的问题有点关系:速度是否重要?在几乎所有情况下,易维护性都应该胜过绝对性能。特别是在执行连接和稍微复杂的查询时,我想SQL的返回速度应该是毫秒,而LINQ不是。。。SQL有索引,LINQ没有。@gbn是的,速度很重要。这是一个非常大的负载过程,最坏情况下应该在10-20分钟内结束@Teejay:如果你已经有了非常大的数据集,试着使用它,它会更快。谢谢你的回答。似乎您的文章更多地引用了我没有使用的LINQ2SQL。我问的是当数据已经加载时的纯查询性能。你可以说你也需要一个由强大的Linq开发人员组成的团队——或者他们可能会编写一些糟糕的Linq查询。寓意是:如果你在做数据库工作,就学习SQL。Linq是一种方便,而不是替代品。