MySQL模糊查询优化,字符串精准匹配

1.简介

在平时使用msyql需要模糊的匹配字段的时候,我们第一反应就是使用like查询语句来模糊匹配,当数据量小的时候,我们通常感觉不到是否影响查询效率,但在数据量达到百万级,千万级的时候,like查询的低效率就很容易显现出来。这个时候查询的效率就显得很重要。



2.直接使用like语句效率低的原因

下面建立一张测试表作为所有演示的数据。

在这里插入图片描述

在mysql中直接使用like并不会影响查询使用索引,但在开头使用通配符后(% 或者_)索引就会失效,查询数据量较大时必然会造成性能问题。

在这里插入图片描述

在这里插入图片描述



3.模糊查询优化的方法

1.索引

SELECT `column` FROM `table` WHERE `field` like 'keyword%';

没加索引情况下是全表搜索,加了索引情况下速度会大幅度提升,但不适用于全部搜索,只适用于"keywork%"关键字开头

2.LOCATE(‘substr’,str,pos)方法

SELECT `column` FROM `table` WHERE LOCATE('keyword', `field`)>0

keyword是要搜索的内容,field为被匹配的字段,查询出全部存在keyword的数据

3.POSITION(‘substr’ IN field)方法

SELECT `column` FROM `table` WHERE POSITION('keyword' IN `filed`)

position能够看作是locate的别名,功能跟locate同样

4.INSTR(str,‘substr’)方法

SELECT `column` FROM `table` WHERE INSTR(`field`, 'keyword')>0

5.CONTAINS(column,str)方法

SELECT `column` FROM `table` WHERE CONTAINS(`column`, 'keyword')


4.字符串精准匹配

如测试表中的数据所示,如果我们使用like模糊查询,%admin的查询结果会导致student字段不以admin结尾的数据都无法查出来,而使用%admin%则会导致admin1admin12这种数据也被查出来。

在这里插入图片描述

为解决这种问题,需要使用到精准匹配的函数FIND_IN_SET(‘str’,column)。

1.默认函数

select * from test where find_in_set('admin',student);

查询结果:

在这里插入图片描述


2.自定义函数

有时候分隔符不一定会按照逗号来分割,可能会有各种分隔符,如|,&等,需要自定义函数。

select * from test where find_in_set('admin',REPLACE(student,'|',','));

查询结果:

在这里插入图片描述
以上就是关于MySQL 模糊查询优化,以及字符串精准匹配的所有内容,希望对大家有帮助。

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃榴莲不吐葡萄皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值