SQL 与 LINQ 性能 [关闭]

2024-05-05

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

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

我可以操作

  • 通过 SQL 批处理(更快但交互性较差)

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

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

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


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

其次,您是否需要对数据的多个列进行交叉检查和/或完整性检查。我曾经遇到过添加索引和重建表将插入时间从几分钟缩短到几毫秒的情况,这只是由于碎片不良和缺乏算法。

Linq 是生成用于插入和修改逻辑的 SQL 的有效方法。然而你最终总会得到这样的模式:

  1. 从数据库中获取数据
  2. 使用 Linq 修改数据
  3. 将更改提交到数据库。

如果您有可以在插入中利用的任何逻辑,则可以使用集合逻辑在 SQL 中进行更新。例如。更新客户 设置 KeyCustomer = 1,其中 Sales > 1000000。SQL Server 处理这样的命令的速度比您使用 ORM 执行的速度快 1000 倍。然而,正如 @gbn 已经正确指出的那样,除非您拥有一支由强大的 SQL 编码人员组成的团队,否则维护通常会在短期内胜过任何性能提升。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 与 LINQ 性能 [关闭] 的相关文章

  • 如何在 C# 中将 MemberExpression 实例组合为 LambdaExpression?

    给定一个这样的类 public class AnEntity public int prop1 get set public string prop2 get set public string prop3 get set 我能够生成一个
  • 如何使用 linq 查询连接两个不同 edmx 中的两个表

    如何使用 linq 查询连接两个不同 edmx 中的两个表 有没有办法同时从 2 个不同的 edmx 进行查询 Thanks Update 根据您的评论 EF 无法解析跨 2 个不同上下文的组合表达式树 如果表中的记录总数相对较小 或者您可
  • TSQL - 生成文字浮点值

    我理解比较浮点数时遇到的许多问题 并对它们在这种情况下的使用感到遗憾 但我不是表格作者 只有一个小障碍需要克服 有人决定使用浮点数 就像您期望使用 GUID 一样 我需要检索具有特定浮点值的所有记录 sp help MyTable Colu
  • 如何连续添加起始行和下一行的值

    我只想创建一个 sql 查询 结果就像图片上的那样 类似于 SQL 中的斐波那契数列 Ex Column 1 10 则 Result 列的值为 Result 10 因为这是第一行 然后假设column1第二行的值为50 那么Result第二
  • 在 MS Access SQL 查询中从正常日期转换为 unix 纪元日期

    我正在尝试编写一个通过 ODBC 连接到 MySQL 数据库的 MS Access 2007 连接的查询 一切工作正常 查询执行我想要的操作 我挂断的部分是我一直在询问用户 unix 纪元时间 而不是常规日期 我查找了 MS Access
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • 根据由另一列分组的不同列的最大值获取值[重复]

    这个问题在这里已经有答案了 我想根据由另一列分组的不同列的最大值来获取列的值 我有这张表 KEY NUM VAL A 1 AB B 1 CD B 2 EF C 2 GH C 3 HI D 1 JK D 3 LM 并想要这样的结果 KEY V
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将
  • 添加冗余赋值可以在未经优化的情况下编译时加快代码速度

    我发现一个有趣的现象 include
  • 带有可变 WHERE 子句的批量 UPDATE 表

    我有一堆值对 foo1 bar1 foo2 bar2 我想做一堆更新 将 foo 列设置为 foo1 其中 bar 列为 bar1 我正在使用 psycopg2 在 Python 中执行此操作 我可以executemany与查询UPDATE
  • Snowflake 中的动态 SQL

    当我在雪花中运行动态 SQL 时 遇到以下错误 未完成对 SQL MAIN 的分配 因为值超出了变量的大小限制 它的大小是263 限制为 256 内部存储大小以字节为单位 这是代码 SET v G 1 SET v G1 v G VARCHA
  • 使用 MVC 5 和实体框架的 jQuery 数据表

    我需要一些关于在控制器中放入什么内容的指导 以便我可以对 jQuery 数据表使用服务器端处理 我正在使用 MVC 5 和实体框架 示例位于 http datatablesmvc codeplex com documentation htt
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • IIF(...) 不是公认的内置函数

    我正在尝试在 Microsoft SQL Server 2008 R2 中使用它 SET SomeVar SomeOtherVar IIF SomeBool value when true value when false 但我收到一个错误
  • mysql表中的数据非常大。即使 select 语句也需要很多时间

    我正在开发一个数据库 它是一个相当大的数据库 有 13 亿行和大约 35 列 这是我检查表状态后得到的结果 Name Table Name Engine InnoDB Version 10 Row format Compact Rows 1
  • 如何在 Entity Framework Core 中按周分组?

    在实体框架 6 中我可以使用SqlFunctions DatePart http msdn microsoft com en us library dd487171 aspx method var byWeek data GroupBy x
  • Oracle:按月分区表

    我的解决方案 德语几个月 PARTITION BY LIST to char GEBURTSDATUM Month PARTITION p1 VALUES JANUAR PARTITION p2 VALUES Februar PARTITI

随机推荐