【问题标题】:Linq: SqlFunctions.PatIndex vs string.Contains for string comparissonLinq:SqlFunctions.PatIndex vs string.Contains 用于字符串比较
【发布时间】:2014-03-17 13:34:47
【问题描述】:

对于同一查询,以下哪个版本的性能会更好:

版本 1(string.Contains):

var query = db.Products
    .Where( p => p.Description.Contains( description ) );

第 2 版(SqlFunctions.PatIndex):

var query = db.Products
    .Where( p => SqlFunctions.PatIndex("%" + description + "%",p.Description) > 0  );

【问题讨论】:

  • 只需将两个版本都用Stopwatch 计时,看看哪个更快。
  • 实际上您的问题与 linq 无关 - 它与 PATINDEXLIKE 的性能有关
  • @SonerGönül,我在询问之前就这样做了,结果无关紧要。我发布这个问题是希望处理过大数据的人表达他在这方面的经验。
  • @Elio.Batista 与从数据库服务器检索数据相比,SQL 生成速度非常快。我也怀疑这两种方法中的任何一种是否会比其他方法快几个滴答声。因此,真正的区别在于在服务器端执行生成的普通 SQL 查询
  • @SergeyBerezovskiy,我会采纳你的建议。我会保持开放,看看其他人是否也可以合作。我正在构建一个非常大的系统 (ERP) 的基础架构,因此在深入开发之前澄清这样的想法对我来说非常重要。谢谢

标签: c# linq


【解决方案1】:

我相信版本 1 理论上运行速度更快。

原因:

  1. 这两个版本最终都会转换为 SQL 查询。
  2. 版本 1 转换为带有“like”运算符的 where 子句的查询
  3. 版本 2 转换为带有“PatIndex”功能的 where 子句的查询。
  4. 我们知道,与大型数据集中的纯“like”运算符相比,SQL 中的函数需要更长的时间才能返回结果。

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多