我有一个数据库查询,它会使用 like 子句进行全表扫描,并遇到了一个我很好奇的问题......
以下哪项在 Mysql 中应该运行得更快,或者它们会以相同的速度运行?就我而言,基准测试可能会回答这个问题,但我想知道答案的原因。如果这很重要,被过滤的列包含几千个字符。
SELECT * FROM users WHERE data LIKE '%=12345%'
或
SELECT * FROM users WHERE data LIKE '%proileId=12345%'
我可以想出其中每一个都可能优于另一个的原因,但我很想知道其中的逻辑。
最佳答案
在所有条件相同的情况下,更长的匹配字符串应该运行得更快,因为它允许以更大的步长跳过测试字符串并进行更少的匹配。
有关字符串匹配背后算法的示例,请参见示例 Boyer Moore Algorithm on Wikipedia .
当然,并非所有事物都是平等的,所以我肯定会对其进行基准测试。
快速检查发现 mysql reference docs以下段落:
如果您使用 ... LIKE '%string%' 并且字符串长度超过三个字符,MySQL 使用 Turbo Boyer-Moore 算法初始化字符串的模式,然后使用该模式执行搜索更快。
关于mysql - 在 SQL Like 表达式中使用较长的字符串是否会阻碍或帮助查询执行速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936321/