Mysql regexp,like两种方法的比较

在 MySQL 中,REGEXP 和 LIKE 都用于字符串模式匹配,但它们的语法、功能和性能有所不同。以下是详细的比较:

1. 语法与匹配能力

LIKE
  • 通配符:仅支持两种通配符:
    • %:匹配任意数量(包括零个)的任意字符。
    • _:匹配单个任意字符。
      WHERE s_name LIKE '张%';  -- 以 "张" 开头
      WHERE s_name LIKE '%明';  -- 以 "明" 结尾
      WHERE s_name LIKE '_明';  -- 第二个字符是 "明"(如 "赵明")
      REGEXP
  • 正则表达式:支持完整的正则表达式语法,功能更强大:
    • ^:匹配字符串开头。
    • $:匹配字符串结尾。
    • []:字符类(如 [abc] 匹配 ab 或 c)。
    • *+?{n}:重复次数限定符。
    • |:或操作(如 a|b 匹配 a 或 b)。
    • \b:单词边界。
    • WHERE s_name REGEXP '^张';   -- 以 "张" 开头
      WHERE s_name REGEXP '明$';   -- 以 "明" 结尾
      WHERE s_name REGEXP '[0-9]'; -- 包含数字

      2. 性能差异

    • LIKE
      • 前缀匹配(LIKE '张%':可以利用索引,性能较好。
      • 后缀或中间匹配(LIKE '%张' 或 LIKE '%张%':无法利用索引,需全表扫描,性能较差。
    • REGEXP
      • 不支持索引优化:无论模式如何,都需要逐行检查,性能通常低于 LIKE,尤其是大数据量时。
    • 3. 大小写敏感性

    • LIKE
      • 默认与表的字符集排序规则(collation)一致。例如:
        • utf8_general_ci:不区分大小写。
        • utf8_bin:区分大小写。
      • 使用 LIKE BINARY 可强制区分大小写。
    • REGEXP
      • 默认不区分大小写。
      • 使用 REGEXP BINARY 可强制区分大小写。

4. 适用场景

场景推荐使用原因
简单前缀 / 后缀匹配LIKE语法简单,前缀匹配可利用索引,性能更佳。
复杂模式匹配(如数字、特殊字符)REGEXPLIKE 无法表达复杂模式(如 [0-9]\b)。
需要正则表达式的高级功能REGEXP如字符类、重复限定符、或操作等。

总结

  • 优先使用 LIKE:如果需求能用 % 和 _ 表达(如简单的前缀 / 后缀匹配)。
  • 使用 REGEXP:当 LIKE 无法满足复杂模式匹配需求时。
  • 性能考虑:避免在 LIKE 或 REGEXP 中使用前缀通配符(如 %张),因为会导致全表扫描。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值