Linq到Sql和SQl Query之间哪个更快

时间:2015-06-26 07:08:50

标签: c# sql linq

我有像这样的对象列表

List<Product> _products;

然后我得到productId输入并在此列表中搜索<​​/ p>

var target = _peoducts.Where(o => o.productid == input).FirstOrDefault();

我的问题是

  1. 如果此列表包含100个产品(productId从1到100)和一个 输入我得到productId = 100.这意味着此方法必须循环100 时间吧? (如果我在查询中ORDER BY productId ASC

  2. 在使用此方法和使用where子句的数据库查询之间     这个WHERE productId = @param

  3. 谢谢。

3 个答案:

答案 0 :(得分:1)

  1. 没有。如果存在具有键productId的索引,则会找到具有O(log n)操作的正确行

  2. 只需实施这两种方法并花点时间。 (提示:使用StopWatch()类)

  3. <小时/> 的修改

    要获得完整的性能,您应该创建一个中间(未排序)List<T>,但将所有逻辑放在一个在SQL Server上运行的LINQ查询中。

答案 1 :(得分:1)

@可能有助于得到你的答案。

https://www.linqpad.net/WhyLINQBeatsSQL.aspx

答案 2 :(得分:1)

如果您在Where上执行List<Product>,则:

  • 你从数据库中获得了所有100行
  • 然后循环浏览内存中的所有产品,直到找到匹配的产品或者直到您浏览完整个列表但没有找到任何产品。

另一方面,如果您使用了连接到数据库表的IQueryable<Product>,那么:

  • 你还没有从数据库中读到任何东西
  • 当您应用Where时,您仍然无法阅读任何内容
  • 当你应用FirstOrDefault时,构造一个sql查询来查找你需要的那一行。给定表上的正确索引,这将非常快。