【问题标题】:Using replace or regex in database queries在数据库查询中使用替换或正则表达式
【发布时间】:2015-08-30 08:09:40
【问题描述】:

我正在阅读 C# 5,所以我想出了一个问题:
假设我们在数据库中有一个有几行的表,每一行是一个字符串字段,现在我想从字段中删除所有元音。所以我们可以这样写:

var query = names
    .Select (n => n.Replace ("a", "").Replace ("e", "").Replace ("i", "")
            .Replace ("o", "").Replace ("u", ""))
    .Where (n => n.Length > 2)
    .OrderBy (n => n);

你可以看到.Replace方法调用了五次,所以我们可以很容易地用正则表达式代替字符串的替换:

n => Regex.Replace (n, "[aeiou]", "")

本书建议在数据库查询中最好使用字符串的替换而不是正则表达式的替换。
我的问题是它是如何区分的?哪个效率更高?

【问题讨论】:

  • 这并不重要。如果有“几行” - 无论如何它都会很快,如果有数百万行,那么你应该解决你的问题是 Where (n => n.Length > 2)OrderBy (n => n)
  • 如果这是 LINQ-To-SQL,那么一些 sql 提供者不理解 RegEx,而几乎所有提供者都有某种字符串替换功能。 RegEx 替换可能无法转换为 SQL。
  • @zerkms:如果是 Linq-To-Sql,它肯定会转换为提供者对 SQL 是什么的想法。

标签: c# regex performance linq


【解决方案1】:

为什么书上说要避免正则表达式

是因为 RegEx 比其他内置比较函数慢

并认为当您使用 RegEx 处理数千条记录时,时间复杂度是多少。

还有内置比较函数的时间复杂度。

【讨论】:

  • “RegEx 比其他内置比较函数慢” --- 这是一个糟糕的说法,尤其是当您将 1 个正则表达式调用与 5 个搜索替换函数调用进行比较时。
  • "并认为当您使用 RegEx 处理数千条记录时,时间复杂度会是多少。" -- 考虑调用 x5 字符串处理函数。
  • zerkms,说得好。我明白你的意思了。你应该编辑和改进我的答案。
猜你喜欢
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2011-09-26
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
相关资源
最近更新 更多