有传言说:
SELECT * FROM lineage_string where lineage like '%179%' and lineage regexp '(^|/)179(/|$)'
Run Code Online (Sandbox Code Playgroud)
会比这更快:
SELECT * FROM lineage_string where lineage regexp '(^|/)179(/|$)'
Run Code Online (Sandbox Code Playgroud)
谁能确认一下?或者知道一种测试这种查询速度的好方法.谢谢
Mar*_*ers 26
它可能更快,因为可以比正则表达式更快地评估LIKE条件,因此如果大多数行未通过测试,它可能会更快.但是,如果大多数行成功,它将会更慢,因为必须为成功的行而不是仅一个行运行两个测试.它还取决于优化器首先选择运行的表达式.
如果你有这样的东西,可以见证更大的加速:
SELECT * FROM (
SELECT * FROM lineage_string
WHERE lineage LIKE '179%'
) WHERE lineage regexp '^179(/|$)'
Run Code Online (Sandbox Code Playgroud)
现在可以使用索引来查找可能的行,因为LIKE'179%'是可搜索的.根本不需要检查许多行.
一如既往,最好的方法是根据实际数据自行测量.
bob*_*nce 13
是的,它可能会快一点,因为标准SQL LIKE比完全正则表达式解析器更简单.
然而,实际上两者都非常缓慢,因为两者都不能使用指数.(LIKE如果匹配字符串不以通配符开头,则可以使用索引,但这不是这种情况.)
如果您担心速度,则应更改架构,以便可以179直接将其放入列中并对其进行索引,而不必在每行上手动检查字符串.