Mel*_*lon 17 mysql sql database
我正在使用MySQL.我问了一个关于如何在数据库中查询单个单词匹配的问题.
有一个答案建议我使用 REGEXP '[[:<:]]word[[:>:]]'
这是一个很好的答案,但是,REGEXP '[[:<:]]word[[:>:]]'
从性能角度来看,我不确定这是怎么回事?如果我有一个大表,这样会损害我的应用程序的性能吗?
例如,与=
操作进行比较,例如WHERE column_name='value'
,REGEXP
操作是否比=
大表慢得多?
还有另一个答案建议我使用LIKE,但我认为从性能的角度来看它并不好.
然后,我用Google搜索,发现了一个文章它说用LIKE
甚至更快的比REGEXP
.我感到困惑,我应该在大表中使用哪种方式进行单词匹配查询...
我可以说,那=
是最快的操作吗?从性能角度看LIKE
,它REGEXP
是最差的吗?
Joh*_*ica 37
关于正则表达式
regexp 永远不会在MySQL中使用索引.如果出现以下情况
,=
将使用索引
考虑到这些和其他一些更深奥的注意事项=
比较多比一个正则表达式更快.
关于喜欢
如果通配符不是第一个char,则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
Run Code Online (Sandbox Code Playgroud)
like
使用索引时的性能非常接近=
(假设返回的行数相同).