Ama*_*lls 10 .net sql linq performance
我目前正在和一个正在讨论LINQ查询性能的人进行辩论.
有没有人对此进行过任何科学测试?
如果没有,出于性能原因,你必须用SQL查询替换LINQ的轶事证据将帮助我说明问题.
我对此略有不同; 在进行性能分析时(使用我们闪亮的分析器),我们注意到LINQ(在这种情况下为SQL)正在为基本查询生成TSQL,并且操作在DB服务器上运行得非常快(0.5ms等) - 但是,实际查询操作花费的时间更长(对于相同的0.5ms查询,在某些情况下为20ms +).那么时间到了哪儿?您可能会想到"查询翻译",但没有; 我们也有很多ExecuteQuery<T>代码(即你手工编写TSQL的地方),这是完全相同的事情.事实证明,在物化者和身份地图之间的某个地方,大量的时间正在流失.
所以; 我们编写了我们自己的物化器,它几乎是一个替代品ExecuteQuery- 因此诞生了短小精悍.
在更多的LINQ方面,它通常可以为简单查询生成TSQL ,但对于任何复杂的东西,我通常更信任手工编码的TSQL.以案例为样本,我有一个涉及组,跳过和接受的复杂查询.它表现不佳.当我用ROW_NUMBER()等手写它时,相同的结果占了"统计IO"和总时间的4%.
我目前对LINQ的看法是,ORM工具使数据变异变得轻而易举,但对于查询,我倾向于使用dapper.这是具有讽刺意味的,因为LINQ中的Q是"查询".
LINQ在LINQ2SQL或EF中需要有一个关于如何将LINQ查询转换为SQL的通用规则集,并引入了抽象概念.这种抽象有时会导致语句不是最优的.手动编写SQL语句允许您根据具体情况进行调整.
这导致得出结论,SQL的速度更快,特别是在复杂场景中.但这并不意味着每个LINQ查询都比它的SQL等价慢.
我将EF 1与Oracle结合使用的经验支持了这一点.