【发布时间】:2011-03-25 21:04:04
【问题描述】:
查询1:(闪电般的速度)
sp_executesql "select * from tablesView where Id = 1"
对比
查询2:(太慢了)
sp_executesql "select * from tablesView where Id = @Id", N"@Id int", @Id=1
tablesView - a view containing multiple joins
LINQ 总是将查询转换为 Query2 形式,因此性能非常糟糕。
问题:我需要 query2 缓慢的原因,以及任何解决方案(如果有的话)。 以及针对 LINQ 的解决方案。
----额外的cmets:
性能下降肯定是因为 2 列正在使用排名函数(row_number),但我无法避免它们,我需要它们。
【问题讨论】:
-
你有很多 ID = 1 的行吗?
-
@Lasse,即使我有 50 条记录,差异也很大。比如 0 秒 vs 10 秒,一件事是 select * from table,通常是一个有很多连接的视图。
-
@id传入的数据类型是什么?您可能有一个隐式强制转换正在阻止使用索引。 -
@WhoIsNinja - 嗯,没错。那么你可能有一个参数嗅探问题。参数化计划将根据第一次为
@id传入的值进行编译,这可能比 1 更具(或更少)选择性。为该值编制的计划可能不适合其他人。 -
@WhoIsNinja - 通常的解决方案是使用查询提示,例如
OPTIMIZE FOR或RECOMPILE。虽然不确定如何从 LINQ 执行此操作。
标签: .net sql sql-server linq