代码之家  ›  专栏  ›  技术社区  ›  Allain Lalonde

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

  •  6
  • Allain Lalonde  · 技术社区  · 14 年前

    我有一个db查询,它将使用like子句进行全表扫描,遇到一个我很好奇的问题。。。

    SELECT * FROM users WHERE data LIKE '%=12345%'
    

    SELECT * FROM users WHERE data LIKE '%proileId=12345%'
    

    我可以找出其中每一个都可能优于另一个的原因,但我很想知道其中的逻辑。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Jonathan Leffler    14 年前

    在所有条件相同的情况下,较长的匹配字符串应该运行得更快,因为它允许以较大的步长跳过测试字符串,并执行较少的匹配。

    Boyer Moore Algorithm on Wikipedia

    当然,不是所有的事情都是平等的,所以我肯定会基准它。

    快速检查发现 mysql reference docs 以下段落:

        2
  •  1
  •   MarkR    14 年前

    没什么区别。因为在LIKE表达式的开头有一个%符号,这就完全排除了索引的使用,索引只能用于匹配字符串的a前缀。

    因此,无论哪种方式,它都将是一个完整的表扫描。