Linq to SQL Performance using contains

时间:2009-06-01 08:07:21

标签: vb.net linq performance

我正在重载查询SQL数据库的vb.net搜索过程。 我用作比较的旧方法之一使用存储过程来执行搜索并返回查询。 我的新方法使用linq。

在使用包含linq的查询时,我有点担心性能。我正在使用这两种方法查看同样可比较的查询 基本上有1个where子句 以下是一些分析器结果;

Where name = "ber10rrt1"
  • Linq查询:24reads
  • 存储查询:111reads

    其中name =“%ber10%”

  • Linq查询:53174reads

  • 存储过程查询:23386reads

忘了片刻,索引(不是我的数据库)......事实是两个方法基本上都在执行相同的查询(尽管存储过程确实引用了[某些]表的视图)

这是否与其他人的linq to sql的实验相结合?

另外,有趣的是,

  • 使用类似“BER10%”

  • resultset.Where(Function(c)c.ci.Name.StartsWith(name))

使用13125reads和linq使用8172reads

在storedproc中的结果

1 个答案:

答案 0 :(得分:2)

我不确定是否有足够的资源进行完整的分析......我假设我们在这里谈论string.Contains / string.StartsWith(不是List<T>.Contains)。

如果生成的TSQL类似,则结果应具有可比性。对此有一些警告 - 例如,查询列是计算的+持久值吗?如果是这样,SET选项必须完全匹配才能“按原样”使用(否则必须每行重新计算)。

那么:SP和LINQ的TSQL是什么?它们直接可比吗? 你提到VIEW - 我猜这可能会产生很大的不同,如果(例如)它过滤掉数据(通过WHEREINNER JOIN)。

同样 - LIKE%开始的条款很少是一个好主意 - 尤其是,它无法有效地使用任何索引。使用“全文搜索”可能会有更好的表现;但这不能通过LINQ直接获得,因此您必须将其包装在SP中并通过LINQ数据上下文公开SP(只需将SP拖入设计器中)。

VIEW 上的(以及SP中的其他代码)是这里的主要区别。