【问题标题】:REGEXP performance (compare with "LIKE" and "=")REGEXP 性能(与“LIKE”和“=”比较)
【发布时间】:2011-11-16 14:30:37
【问题描述】:

我正在使用 MySQL。我问了一个关于如何在数据库中查询a single word match here的问题。

  • 有一个答案建议我使用REGEXP '[[:<:]]word[[:>:]]'

    这是一个很好的答案,但是,从性能的角度来看,我不确定这 REGEXP '[[:<:]]word[[:>:]]' 的情况如何?如果我有一个大表,这种方式会损害我的应用程序的性能吗?

例如,与= 操作比较,例如WHERE column_name='value',对于大表,REGEXP 操作是否比 = 慢得多?

  • 还有另一个答案建议我使用 LIKE,但我认为从性能的角度来看它并不好。

    然后,我用谷歌搜索了一个 article,上面写着 use LIKE is even faster than REGEXP 。我很困惑,我应该使用哪种方式在大表中进行单个单词匹配查询...

我可以说,= 是最快的操作,然后 LIKEREGEXP 是性能最差的吗?

【问题讨论】:

  • 如果您处理需要按标准过滤的大数据,请使用适合该工作的工具,例如 Sphinx,然后您就不必担心 LIKE、REGEXP 或 equal 是否更快。它还取决于您的索引,什么不是,什么是更快的主题太广泛了。专注于解决问题,为此,您需要正确的工具。
  • 嗨,NB这取决于我的索引是什么意思?
  • 表示LIKE比较可以使用索引。如果您有一个名为 text_data 的字段和该字段上的索引,则可以使用 LIKE 'your_seach_string%' 并且 LIKE 可能在这种情况下使用该索引。因此,它的性能是可变的,因为它可能会进行全表扫描,也可能只扫描索引。但是,在大型数据集上使用 LIKE 不是适合该工作的工具。我只是重复一遍,你最好阅读有关 Sphinx(它作为 MySQL 引擎安装)并使用它。
  • 注: “=”操作怎么样,它总是使用索引吗?
  • 是的,如果存在的话。您没有与 = 进行部分匹配。

标签: mysql sql database


【解决方案1】:

关于正则表达式

正则表达式从不在 MySQL 中使用索引。
如果满足以下条件,= 将使用索引:

  • 在列上声明了索引;
  • 列中的值具有足够的基数(如果超过 +/- 20% 的行匹配,MySQL 将不使用索引,因为在这种情况下进行全表扫描更快 );
  • 同一张表上没有其他索引更适合(MySQL 每个子选择每个表只能使用一个索引);

考虑到这些和其他一些更深奥的警告,= 比较比正则表达式快

关于喜欢

如果通配符不是第一个字符,LIKE 可以使用索引。

SELECT * FROM t WHERE a LIKE 'abc'   <<-- (case insensitive `=`) can use an index
SELECT * FROM t WHERE a LIKE 'abc%'  <<-- can use an index
SELECT * FROM t WHERE a LIKE 'a%'    <<-- can use an index, depending on cardinality
SELECT * FROM t WHERE a LIKE '%a%'   <<-- cannot use an index
SELECT * FROM t WHERE a LIKE '_agf'  <<-- cannot use an index

like 在使用索引时的性能非常接近=(假设返回的行数相同)。

【讨论】:

    【解决方案2】:

    还有另一种搜索数据的方法:Full-Text Search。 可以在like=不够用(执行时间)和Sphinx、Lucene太强大的时候使用。

    要使用它,您应该在列上创建全文索引并查询它。如果您将使用它,请注意ft_min_word_lenft_max_word_len 系统变量,它们会减少最小/最大大小的单词。

    希望对你有帮助。

    @Johan 回答了您的其余问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-04
      • 2011-06-10
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2010-11-14
      • 2015-10-22
      相关资源
      最近更新 更多