mysql - 在 SQL Like 表达式中使用较长的字符串是否会阻碍或帮助查询执行速度?

标签 mysql performance

我有一个数据库查询,它会使用 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/

相关文章:

php - 如何在php/mysql中根据列高效打印数据库排序中的名称?

java - 在 Java 中增长数组的最节省内存的方法?

Android - Activity 的局部变量与实例变量的性能

c# - 注入(inject)和性能

c# - 在不将结构存储为局部变量的情况下激活结构是否预期比不将其存储为局部变量更慢?

php - 如何在PHP中几秒钟后禁用电子邮件确认链接

mysql - CONCAT 子查询结果和固定字符串

php - JSON从mysql数据库获取和推送

python - 具有特殊字符的 MYSQL::Connector/Python UPDATE 语句不起作用

performance - JMeter 在非 GUI 中具有更高的响应时间