回答

收藏

SQL vs LINQ性能

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

目前,我们有一个依赖框架的独立实体框架DB独立的ORM。
' {& ?' g3 k, |$ Y) Y我必须建立一个软件,将数据库中的元数据批量加载到大约150个excel模板中(以及相关单元格位置、单元格类型、格式等信息)。
1 B* L$ p9 ]2 j# ]2 W2 \! o我可以操作: i4 c9 Q" L  \5 q) ]
通过SQL批处理(速度更快,但交互性更差)9 d# g- }" j3 r4 _
使用在内存中构建对象LINQ查询处理各种完整性检查,然后将修改提交给数据库
& k. r* @% l% m6 A0 @2 @, J
我知道SQL绝对快,但我知道… 它快多少?6 d% q, b9 x' p, ]) V8 I
详细地说,SQL查询比LINQ查询多少 (假设ORM所有所需的数据都加载到内存中)    ?" ^% ]5 H/ o3 g* D/ @: ?
                                                                  `* Y/ u- t: g1 v- n- f% ~; ?
    解决方案:                                                               
/ G2 f9 k, }( l1 S6 _5 O% d                                                                在大多数情况下,TBH并不是linq或SQL问题。性能将与要插入的数据量、表中的当前数据量和要维护的索引有关。8 E) [9 M9 \. K
其次,是否需要交叉检查数据列和/或完整性。我曾经遇到过这样的情况,即由于碎片不正确和算法不足,添加索引和重建表的插入时间从几分钟缩短到几毫秒。
0 D; ]/ ?, l: o" E* j6 }$ tLinq用于插入和修改逻辑的生成SQL有效的方法。但是,您总是会遇到以下模式:
& O# R1 Z0 T/ ]% [+ }[ol]从数据库中获取数据
: @' @6 f' f, S& u使用Linq修改数据
5 P6 S! s/ S0 v, e, z1 w5 u$ c3 E将更改提交到数据库。[/ol]如果您有任何逻辑可以在插入中使用,则可以使用set逻辑在SQL更新更新。例如,更新客户将KeyCustomer设置为1,其中Sales>1000000。SQLServer处理这样的命令比你使用的要快ORM完成速度快1000倍。但是,就像@gbn正确指出,除非你有一个强大的SQL由编码人员组成的团队,否则维护通常会在短时间内超过任何性能收入。
- n5 A; K0 p1 x9 o' y# [, g7 [, z7 [如果必须插入大量记录,实际上应该通过SSIS检查批处理加载/或/ETL。这些API使用更智能的算法并分批执行任何约束检查,而不是每次插入执行,这将为您带来卓越的性能改进。然而,与单击应用程序中的按钮相比,管理SSIS这些都是设计应用程序时需要考虑的设计决策。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则