回答

收藏

SQL vs LINQ性能

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

目前,我们有一个依赖框架的独立实体框架DB独立的ORM。
8 J5 t7 G5 ~3 X. R, Y: D我必须建立一个软件,将数据库中的元数据批量加载到大约150个excel模板中(以及相关单元格位置、单元格类型、格式等信息)。
- S! D( @# N5 T5 G3 a# s. t我可以操作
- E7 ~& }) P5 ^# |4 ?# ]通过SQL批处理(速度更快,但交互性更差)
) Y2 c; e& k8 W5 Z) _使用在内存中构建对象LINQ查询处理各种完整性检查,然后将修改提交给数据库; b( C2 H( T3 E+ }' c2 ^
我知道SQL绝对快,但我知道… 它快多少?
6 F6 a$ n5 [1 ]详细地说,SQL查询比LINQ查询多少 (假设ORM所有所需的数据都加载到内存中)    ?
' U1 u. J7 q' P                                                                2 H: r7 c9 C' x# V' k  K0 P
    解决方案:                                                                3 k! \3 E: o5 A2 R) _5 p) F
                                                                在大多数情况下,TBH并不是linq或SQL问题。性能将与要插入的数据量、表中的当前数据量和要维护的索引有关。. y* N2 F$ V6 l0 y! @0 }
其次,是否需要交叉检查数据列和/或完整性。我曾经遇到过这样的情况,即由于碎片不正确和算法不足,添加索引和重建表的插入时间从几分钟缩短到几毫秒。* p# t' ~4 N/ `0 O# x
Linq用于插入和修改逻辑的生成SQL有效的方法。但是,您总是会遇到以下模式:
7 a( E1 H0 {9 m# A[ol]从数据库中获取数据4 {. ?0 E9 m0 w9 L/ A+ S
使用Linq修改数据
1 `6 \/ B6 X5 e3 g9 N) N1 J7 I将更改提交到数据库。[/ol]如果您有任何逻辑可以在插入中使用,则可以使用set逻辑在SQL更新更新。例如,更新客户将KeyCustomer设置为1,其中Sales>1000000。SQLServer处理这样的命令比你使用的要快ORM完成速度快1000倍。但是,就像@gbn正确指出,除非你有一个强大的SQL由编码人员组成的团队,否则维护通常会在短时间内超过任何性能收入。
' ]5 T9 ~! t4 m+ e/ C如果必须插入大量记录,实际上应该通过SSIS检查批处理加载/或/ETL。这些API使用更智能的算法并分批执行任何约束检查,而不是每次插入执行,这将为您带来卓越的性能改进。然而,与单击应用程序中的按钮相比,管理SSIS这些都是设计应用程序时需要考虑的设计决策。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则