MySQL中的通配符

1. 百分号%
内部工作原理:
  • 代表零个、一个或多个任意字符。
  • LIKE 'A%':MySQL会从索引(如果存在)中查找所有以 “A” 开头的记录。如果没有索引,则需要扫描整个表。
  • MySQL解析器将模式转换为可执行的形式,并利用索引来加速匹配过程(如果有合适的索引)。
性能影响与优化:
  • 索引:为了提高查询效率,可以在经常用于模式匹配的列上创建索引。例如,对于username LIKE 'A%',可以在username列上创建前缀索引。
  • 避免全表扫描:尽量不要在模式的开头使用通配符,因为这会导致MySQL无法利用索引而进行全表扫描。
示例与应用场景:
  • 前缀匹配:查找以特定字符串开头的所有记录。

    SELECT * FROM users WHERE username LIKE 'A%';
    

    这条语句会返回所有以字母 “A” 开头的用户名。

  • 后缀匹配:查找以特定字符串结尾的所有记录。

    SELECT * FROM emails WHERE email LIKE '%@example.com';
    

    这条语句会返回所有电子邮件地址以 @example.com 结尾的用户。

  • 中间匹配:查找包含特定子串的所有记录。

    SELECT * FROM products WHERE description LIKE '%shirt%';
    

    这条语句会返回描述中包含单词 “shirt” 的所有产品。

注意事项:
  • 使用%可能导致全表扫描,尤其是在没有适当索引的情况下,这可能会影响性能。
  • 如果查询条件非常宽松(如LIKE '%'),将返回所有记录,相当于SELECT * FROM table
高级用法:
  • 组合通配符:可以结合多个通配符来构建更复杂的模式。例如,LIKE 'A%B%'匹配以 “A” 开头并包含 “B” 的字符串。
  • 转义字符:当需要匹配实际的百分号时,使用转义字符。例如,LIKE '100%' ESCAPE ''将匹配包含 “100%” 的字符串。
2. 下划线_
内部工作原理:
  • 每个下划线代表一个任意字符的位置,因此LIKE 'J_n'会查找以 “J” 开头,后面跟任意单个字符,然后是 “n” 的记录。
  • 下划线的行为类似于正则表达式中的点号.,但它仅匹配单个字符。
性能影响与优化:
  • 索引利用:虽然_只匹配单个字符,但在某些情况下仍然可以利用索引。例如,LIKE '_a%'可以部分利用索引。
  • 限制使用:尽量减少下划线的数量,因为过多的下划线可能导致索引失效。
示例与应用场景:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值