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

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

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

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

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 小程序即时通讯聊天控件(一)

    小程序即时通讯聊天控件(一)小程序即时通讯——文本、语音输入控件(一)集成近期一直在做微信小程序,业务上要求在小程序里实现即时通讯的功能。这部分功能需要用到文本和语音输入及一些语音相关的手势操作。所以我写了一个控件来处理这些操作。控件样式我们先来看下效果目前的功能就是动态图中展示的,我们可以使用这个控件来切换输入方式(文本或语音)、获取到输入的信息、取消语音输入、语音消息录制过短过长的判断(该接口暂时还未开放),支持发送图片和

    2022年5月14日
    52
  • Java别说取余(%)运算简单,你真的会吗?

    Java别说取余(%)运算简单,你真的会吗?一,直击现场下面我来抛出几道题:说明m是商,n是余数;(1)正数%正数3%2=m…….n2%3=m…….n(2)正数%负数或者负数%正数-3%2=m…….n3%-2=m…….n-2%3=m…….n2%-3=m…….n(3)负数%负数-3%-2=m…….n-2%-3=m…….n二,验证时刻下面的结果没有商m只有余数n;有没有全部答对呢?没有的话来看总结吧

    2022年5月7日
    41
  • 使用AmplifyJS和JQuery编写更好更优雅的javascript事件处理代码

    使用AmplifyJS和JQuery编写更好更优雅的javascript事件处理代码

    2022年2月4日
    50
  • 遍历QMAP「建议收藏」

    遍历QMAP「建议收藏」QMap<QString,QString>::iteratoriter=m_map.begin();while(iter!=m_map.end()){qDebug()<<“Iterator”<<iter.key()<<“:”<<iter.value();/…

    2022年5月30日
    64
  • 打印纸张尺寸换算_常用纸张尺寸大小对照表

    打印纸张尺寸换算_常用纸张尺寸大小对照表648A3297×420B3353×500C3324×458A4210×297B4250×353C4229×324A5148×210B5176×250C5162×229A6105×148B6125×176C6114×162A774×105B788×125C781×114A852×74B862×88DL110×220A937×52B944×62C7/681×162A1026×37B1031×44A组…

    2022年6月20日
    60
  • 百度刷排名,刷流量,刷下拉软件【完全免费】胖虎图图-互动点击系统

    百度刷排名,刷流量,刷下拉软件【完全免费】胖虎图图-互动点击系统软件绿色免安装,打开即可使用。软件大小:1.4MB支持平台:win2000/win2003/winxp/win7/win8下载地址:http://www.phtoto.com/download/胖虎图图-互动点击.rar【2013-8-12】更新日志:修复无法停止任务的bug; 【2013-8-11】更新日志:新增支持谷歌搜索;新增支持360搜索;新增支持搜

    2022年9月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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