mysql全文检索与模糊查询

mysql数据库进阶学习 二

全文检索

新建全文检索方式(支持中文全文检索):
本文使用mysql数据库版本为5.7+,InnoDB数据库引擎
全文检索解析器ngram(解决不支持中文检索方式,版本要求5.7.6+,为mysql内置插件,不需要安装,默认支持检索最短字符为2,即不支持单个字如’国’检索)

alter table news_info add fulltext index ft_in(title,category) with parser ngram;

第二种建立全文检索方法:

create fulltext index 检索名词(如:ft_in) on table_name(检索列名) with parser ngram;

其中fulltext表示全文,index索引,ft_in检索名称,(title,category)表示要设置全文检索的字段名,parser ngram即使用ngram全文解析。
执行完成后,就可以通过一下语句检索:

select *from news_info where match(title,category) against('中国' in boolean mode);

查询结果如下:
在这里插入图片描述
首先解释一下sql语句,使用全文检索的格式:

select xxx from  table_name where 
match(自己设置的检索字段名) against('xx' in boolean mode);

关于设置ngram的最短检索字符值,请自行百度。
使用全文检索在数据量较大的情况下,比(like’’)模糊查询要更快一筹。

模糊查询 like用法

其实使用全文检索也可以达到模糊查询的效果,这里不做比较
注意使用like方法实现模糊查询会使建立好的索引失效(前提是你查询的字段名不是你建立的索引,例:我查询name,where条件是phone like‘%XXX%’其中phone设置了索引,但是name没有,那模糊查询就不会使用索引,如果查询的是phone,则模糊查询还是会使用索引,这是一个很细的细节哦
关于检索的用法请看:mysql复合索引
使用sql语句:

select title from news_info where title like '%中国%' 
这种like '%X%'是指查询包括x的所有数据,%指的是X之前无数个字符,或是X之后无数个字符

查询结果:
在这里插入图片描述
我们可以看到使用了like’%中国%’,查询到的结果是所有包含中国的数据,无论中国所属的位置。我为什么要说所属的位置呢,因为如果查询条件换成like’中%'即输入如下:

select title from news_info where title like'中%'

在这里插入图片描述
我们发现查询到的数据都是中国开头的,我们继续输入查询语句(这里就不查中了,因为数据库里没有以中为结尾的):

select title from news_info where title like'%会'

结果如下:
在这里插入图片描述
我们发现查询到的数据都是末尾为会的。
我们总结一下:
'%X%'表示查询所有包含X的数据,不管位置。
'X%'表示查询以X为开头的数据。
'%X’表示查询以X为末尾的数据。
%表示n个字符。
检查自己是否使用了索引只需要在select的前面加上explain,即:

explain select title from news_info where title like '%中国%' 

在这里插入图片描述
其中title字段设置了索引,所以下面查询显示的key存在,且type为index检索。
换一下查询内容:

explain select * from news_info where title like'%中%'

在这里插入图片描述
我们可以看到type是所有,且key为空,即没有用到索引。

正则表达

^匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
$匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。

通过实例讲解:
输入以下sql语句:

select title from news_info where title regexp '^中'

查询结果为:
在这里插入图片描述
出来这个结果应该很熟悉吧,比较上面的like用法也查出来过,通过查询的内容,我们发现regexp '^X’表示查询以X为开头的数据。
输入如下:

select title from news_info where title regexp '会$'
表示查询以会为结尾的数据

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雪の星空朝酱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值