mysql全文索引是什么_Mysql中的全文索引

以前只是简单听说过Mysql有全文索引,但是一直没有认真去了解过。最近在《MYSQL必知必会》中学习到这个知识点,做下记录。首先,什么是全文索引?简单来说,全文索引其实就是类似于LIKE语句,把包含一定的字符串的的行记录挑选出来。那么问题来了,既然只是达到这个需求的话使用LIKE就行了,LIKE不行的话也还能使用正则表达式,为什么还要大费周章弄个全文索引出来呢?书上提到了三个原因:①性能,Like…

大家好,又见面了,我是你们的朋友全栈君。

以前只是简单听说过Mysql有全文索引,但是一直没有认真去了解过。最近在《MYSQL必知必会》中学习到这个知识点,做下记录。

首先,什么是全文索引?简单来说,全文索引其实就是类似于LIKE语句,把包含一定的字符串的的行记录挑选出来。那么问题来了,既然只是达到这个需求的话使用LIKE就行了,LIKE不行的话也还能使用正则表达式,为什么还要大费周章弄个全文索引出来呢?书上提到了三个原因:

①性能,Like通配符和正则表达式通常需要全表扫描,且极少使用表索引,所以这些搜索非常耗时。

②不能明确控制,单单使用通配符和正则表达式很难甚至不能明确地控制匹配什么和不匹配什么。

③结构不够智能,通配符和正则都是返回所有满足条件的所有行,并且这种返回是相对无序的,不智能的。而全文索引会按照匹配等级对输出结果排序,在前面的更有可能是需要的,更加智能。

那么怎么使用全文索引呢?

首先要在创建表的时候启用全文索引:

CREATE TABLE productnotes (

note_id int NOT NULL AUTO_INCREMENT,

note_text text NULL,

FULLTEXT(note_text)

) ENGINE=MYISAM;

这里的FULLTEXT(note_text)就开启了全文索引。开启以后我们就能对note_text使用全文索引,并且在增加更新删除行的时候,Mysql会自动帮我们更新索引。

全文索引的语法:

SELECT note_text

FROM productnotes

WHERE Match(note_text) Against(‘rabbit’);

注意上面语句的  Match(note_text) Against(‘rabbit’)  ,Match表示针对note_text列进行搜索,Again括号里面指定的东西作为搜索文本。

那么如果是上面这条语句,Mysql会把所有note_text中含有rabbit的行记录选出来。相当于 LIKE ‘%rabbit%’  ;

但是这里必须谈一谈,文章开头所说到的智能是什么意思,问什么会和LIKE不同?实际上,使用全文索引不仅仅只是把所有满足条件的行记录挑选出来,而且会根据  行中词的数目、唯一词的数目、整个索引中词的总数、包含该词的行的数目 这些因素计算出来一个“等级”。等级越大代表越有可能是我们需要的记录, 然后Mysql会把高等级的行记录先显示出来,亦即把更可能是我们需要的搜索结果先显示出来。这就是智能的涵义。

另外,全文索引还有两种模式:查询扩展和布尔文本搜索。

查询扩展:

SELECT note_text FROM productnotes

WHERE Match(note_text) Against(‘anvils’ WITH QUERY EXPANSION) ;

开启了查询扩展,Mysql会返回更多的有可能是我们需要的结果,顾名思义“扩展”嘛。此时Mysql会对数据和索引做两次扫描来完成搜索,步骤如下:

①首先,进行基本的全文索引,找出满足条件行。

②检查上诉结果,并选出所有有用的词。

③Mysql再次进行全文索引,并且 不仅使用原查询词语,而且加上步骤②选出的词。

布尔文本搜索:

SELECT note_text FROM productnotes

WHERE Mtach(note_text) Against(‘heavy -rope* IN BOOLEAN MODE);

开启了布尔模式之后,我们能通过布尔操作符对查询条件做更加精确的要求。比如说上面语句的功能就是:匹配包含heavy但不包含任意以rope开始的词的行。

51f5c25df0321cc51b82860eac0d92f2.png

到这里,全文索引的基础知识就这些了,更具体的或者原理还是看书吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127219.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • 机器学习及深度学习基础—7.20课堂笔记

    机器学习及深度学习基础—7.20课堂笔记本文主要回忆上课所讲的一些关于机器学习与深度学习的基本概念,以此来达到强化记忆与深度理解的目的。

  • goland 2021.1.3 激活(在线激活)

    goland 2021.1.3 激活(在线激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 修改表名列名mysql_怎么修改mysql的表名和列名?

    修改表名列名mysql_怎么修改mysql的表名和列名?在mysql中,可以通过“ALTERTABLE旧表名RENAME新表名;”语句来修改表名,通过“ALTERTABLE表名CHANGE旧字段名/列名新字段名/列名新数据类型;”语句来修改列名。修改mysql的表名MySQL通过ALTERTABLE语句来实现表名的修改,语法规则如下:ALTERTABLERENAME[TO];其中,TO为可选参数,使用与否均不影…

  • 详解第一范式、第二范式、第三范式、BCNF范式

    详解第一范式、第二范式、第三范式、BCNF范式文章目录第一范式定义以及分析:问题研究:第二范式必备知识点函数依赖:码:非主属性:定义分析:解决办法:问题研究:第三范式:定义:分析:问题研究:BCNF范式分析问题研究小结:第一范式定义以及分析:首先是第一范式(1NF)。符合1NF的关系(你可以理解为数据表。“关系模式”和“关系”的区别,类似于面向对象程序设计中”类“与”对象“的区别。”关系“是”关系模式“的一个实例,你可以把”关系”理解…

  • Idea激活码永久有效Idea2020.1.3激活码教程-持续更新,一步到位

    Idea激活码永久有效Idea2020.1.3激活码教程-持续更新,一步到位Idea激活码永久有效2020.1.3激活码教程-Windows版永久激活-持续更新,Idea激活码2020.1.3成功激活

  • 推荐top10的免费下载激活成功教程软件的网站

    推荐top10的免费下载激活成功教程软件的网站Z2ER资源网站Windows绝赞应用爱软客|专注常用软件绿色版、优化版、便携版精品绿色便携软件PortableAppC开心软件园-软件资讯、下载及使用交流Yanu-分享优秀、纯净、绿色、实用的精品软件。ChromeGAE唯一官方网站首页-大软坊-绿色数字未来|DigitalFuture产品类别Windows|极致分享Uptodow…

    2022年10月13日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号