我有一个db查询,它会导致使用like子句进行全表扫描,并且遇到了一个我很好奇的问题......
以下哪项应该在Mysql中运行得更快,或者它们都以相同的速度运行?在我的案例中,基准测试可能会回答它,但我想知道答案的原因.正在过滤的列包含几千个字符,如果这很重要的话.
SELECT * FROM users WHERE data LIKE '%=12345%'
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM users WHERE data LIKE '%proileId=12345%'
Run Code Online (Sandbox Code Playgroud)
我可以提出为什么每一个都可以执行另一个的原因,但我很想知道逻辑.
在所有条件相同的情况下,较长的匹配字符串应该运行得更快,因为它允许以更大的步长跳过测试字符串并执行更少的匹配。
有关刺匹配背后的算法示例,请参阅维基百科上的 Boyer Moore 算法。
当然,并非所有事情都是平等的,所以我肯定会对其进行基准测试。
在mysql 参考文档中快速检查发现以下段落:
如果您使用 ... LIKE '%string%' 并且字符串长度超过三个字符,MySQL 将使用 Turbo Boyer-Moore 算法来初始化字符串的模式,然后使用此模式更快地执行搜索。
| 归档时间: |
|
| 查看次数: |
521 次 |
| 最近记录: |