回答

收藏

SQL vs LINQ性能

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

目前,我们有一个依赖框架的独立实体框架DB独立的ORM。* K2 c- q. |. n# D: P. f& C* [
我必须建立一个软件,将数据库中的元数据批量加载到大约150个excel模板中(以及相关单元格位置、单元格类型、格式等信息)。
% v' Y% t$ _$ X9 ~+ o9 k4 F我可以操作  N( }" u7 D. N" a8 n* l
通过SQL批处理(速度更快,但交互性更差)$ b7 b( C& h: r0 [1 y! h
使用在内存中构建对象LINQ查询处理各种完整性检查,然后将修改提交给数据库
- l* D1 E2 X* @. N6 ~* r
我知道SQL绝对快,但我知道… 它快多少?
, U: P8 t  ^. j4 O! J  y2 U详细地说,SQL查询比LINQ查询多少 (假设ORM所有所需的数据都加载到内存中)    ?, K. H0 ~* I; d, F$ `- g
                                                               
- O4 a' @1 P5 C( |    解决方案:                                                                ' E3 Z& P$ [9 Q9 C
                                                                在大多数情况下,TBH并不是linq或SQL问题。性能将与要插入的数据量、表中的当前数据量和要维护的索引有关。
9 ~& h  h1 O2 M其次,是否需要交叉检查数据列和/或完整性。我曾经遇到过这样的情况,即由于碎片不正确和算法不足,添加索引和重建表的插入时间从几分钟缩短到几毫秒。( p. y2 x9 C' l! G4 o' Q; m2 W
Linq用于插入和修改逻辑的生成SQL有效的方法。但是,您总是会遇到以下模式:
) r5 R) |" y3 O7 U: k[ol]从数据库中获取数据
" V: ~$ R- K" X) @' i" Z使用Linq修改数据1 Y$ g3 p5 Q* g: w  p6 m
将更改提交到数据库。[/ol]如果您有任何逻辑可以在插入中使用,则可以使用set逻辑在SQL更新更新。例如,更新客户将KeyCustomer设置为1,其中Sales>1000000。SQLServer处理这样的命令比你使用的要快ORM完成速度快1000倍。但是,就像@gbn正确指出,除非你有一个强大的SQL由编码人员组成的团队,否则维护通常会在短时间内超过任何性能收入。3 _8 c8 C( C% A& O! u. C! i
如果必须插入大量记录,实际上应该通过SSIS检查批处理加载/或/ETL。这些API使用更智能的算法并分批执行任何约束检查,而不是每次插入执行,这将为您带来卓越的性能改进。然而,与单击应用程序中的按钮相比,管理SSIS这些都是设计应用程序时需要考虑的设计决策。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则