我正在重载查询SQL数据库的vb.net搜索过程。 我用作比较的旧方法之一使用存储过程来执行搜索并返回查询。 我的新方法使用linq。
在使用包含linq的查询时,我有点担心性能。我正在使用这两种方法查看同样可比较的查询 基本上有1个where子句 以下是一些分析器结果;
Where name = "ber10rrt1"
存储查询:111reads
其中name =“%ber10%”
Linq查询:53174reads
忘了片刻,索引(不是我的数据库)......事实是两个方法基本上都在执行相同的查询(尽管存储过程确实引用了[某些]表的视图)
这是否与其他人的linq to sql的实验相结合?
另外,有趣的是,
使用类似“BER10%”
resultset.Where(Function(c)c.ci.Name.StartsWith(name))
使用13125reads和linq使用8172reads
在storedproc中的结果答案 0 :(得分:2)
我不确定是否有足够的资源进行完整的分析......我假设我们在这里谈论string.Contains
/ string.StartsWith
(不是List<T>.Contains
)。
如果生成的TSQL类似,则结果应具有可比性。对此有一些警告 - 例如,查询列是计算的+持久值吗?如果是这样,SET
选项必须完全匹配才能“按原样”使用(否则必须每行重新计算)。
那么:SP和LINQ的TSQL是什么?它们直接可比吗?
你提到VIEW
- 我猜这可能会产生很大的不同,如果(例如)它过滤掉数据(通过WHERE
或INNER JOIN
)。
同样 - LIKE
从%
开始的条款很少是一个好主意 - 尤其是,它无法有效地使用任何索引。使用“全文搜索”可能会有更好的表现;但这不能通过LINQ直接获得,因此您必须将其包装在SP中并通过LINQ数据上下文公开SP(只需将SP拖入设计器中)。
VIEW
上的(以及SP中的其他代码)是这里的主要区别。