【发布时间】:2011-11-16 14:30:37
【问题描述】:
我正在使用 MySQL。我问了一个关于如何在数据库中查询a single word match here的问题。
-
有一个答案建议我使用
REGEXP '[[:<:]]word[[:>:]]'这是一个很好的答案,但是,从性能的角度来看,我不确定这
REGEXP '[[:<:]]word[[:>:]]'的情况如何?如果我有一个大表,这种方式会损害我的应用程序的性能吗?
例如,与= 操作比较,例如WHERE column_name='value',对于大表,REGEXP 操作是否比 = 慢得多?
-
还有另一个答案建议我使用 LIKE,但我认为从性能的角度来看它并不好。
然后,我用谷歌搜索了一个 article,上面写着 use
LIKEis even faster thanREGEXP。我很困惑,我应该使用哪种方式在大表中进行单个单词匹配查询...
我可以说,= 是最快的操作,然后 LIKE 和 REGEXP 是性能最差的吗?
【问题讨论】:
-
如果您处理需要按标准过滤的大数据,请使用适合该工作的工具,例如 Sphinx,然后您就不必担心 LIKE、REGEXP 或 equal 是否更快。它还取决于您的索引,什么不是,什么是更快的主题太广泛了。专注于解决问题,为此,您需要正确的工具。
-
嗨,NB这取决于我的索引是什么意思?
-
表示LIKE比较可以使用索引。如果您有一个名为
text_data的字段和该字段上的索引,则可以使用LIKE 'your_seach_string%'并且 LIKE 可能在这种情况下使用该索引。因此,它的性能是可变的,因为它可能会进行全表扫描,也可能只扫描索引。但是,在大型数据集上使用 LIKE 不是适合该工作的工具。我只是重复一遍,你最好阅读有关 Sphinx(它作为 MySQL 引擎安装)并使用它。 -
注: “=”操作怎么样,它总是使用索引吗?
-
是的,如果存在的话。您没有与
=进行部分匹配。