回答

收藏

SQL vs LINQ性能

技术问答 技术问答 328 人阅读 | 0 人回复 | 2023-09-14

目前,我们有一个依赖框架的独立实体框架DB独立的ORM。* Q6 }. A. r% |  B; W5 Z4 h/ g
我必须建立一个软件,将数据库中的元数据批量加载到大约150个excel模板中(以及相关单元格位置、单元格类型、格式等信息)。
2 X' E6 k0 H- I9 f# M我可以操作
0 m5 R7 x5 H* D/ @- A. ?通过SQL批处理(速度更快,但交互性更差), @; A( J! X( F: r
使用在内存中构建对象LINQ查询处理各种完整性检查,然后将修改提交给数据库4 Q2 E7 [, X9 [7 f  X6 U
我知道SQL绝对快,但我知道… 它快多少?
; \/ m7 H6 q8 Y- u3 I6 Q7 `2 P详细地说,SQL查询比LINQ查询多少 (假设ORM所有所需的数据都加载到内存中)    ?
5 T. |# c7 S" ?$ B0 M+ u9 q                                                                9 ~8 a, F1 A$ F! Q8 L
    解决方案:                                                                . k  D- Z4 R. t! N  K
                                                                在大多数情况下,TBH并不是linq或SQL问题。性能将与要插入的数据量、表中的当前数据量和要维护的索引有关。! `1 U. a/ c, L) f  m
其次,是否需要交叉检查数据列和/或完整性。我曾经遇到过这样的情况,即由于碎片不正确和算法不足,添加索引和重建表的插入时间从几分钟缩短到几毫秒。
4 |0 l& E/ W5 N9 |3 b4 v+ |1 wLinq用于插入和修改逻辑的生成SQL有效的方法。但是,您总是会遇到以下模式:
6 ]2 D# D% T* A[ol]从数据库中获取数据! {; [* p( s  S9 {3 b8 ?) u
使用Linq修改数据6 _" g9 L; u9 ^7 ]9 S% k
将更改提交到数据库。[/ol]如果您有任何逻辑可以在插入中使用,则可以使用set逻辑在SQL更新更新。例如,更新客户将KeyCustomer设置为1,其中Sales>1000000。SQLServer处理这样的命令比你使用的要快ORM完成速度快1000倍。但是,就像@gbn正确指出,除非你有一个强大的SQL由编码人员组成的团队,否则维护通常会在短时间内超过任何性能收入。9 V; X9 x# B/ M; _- ~5 g
如果必须插入大量记录,实际上应该通过SSIS检查批处理加载/或/ETL。这些API使用更智能的算法并分批执行任何约束检查,而不是每次插入执行,这将为您带来卓越的性能改进。然而,与单击应用程序中的按钮相比,管理SSIS这些都是设计应用程序时需要考虑的设计决策。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则