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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Win10 1709 无法访问局域网共享问题及解决[通俗易懂]

    Win10 1709 无法访问局域网共享问题及解决[通俗易懂]摘要Win10升级更新为1709以后,出现了不能匿名访问局域网共享,同时本机的共享也无法被其它机器匿名访问。本文给出了设置方法来解决此问题。1.前言Win10的安全性设置越来越严格,与此同时,也带来了易用性的缺失。新手往往会陷入很多功能不能使用的窘境中,从而导致了对Win10的排斥。局域网共享就是一个很典型的例子。对很多中小企业而言,无密码的局域网共享是非常方便和实用的功能,对于提…

    2022年7月12日
    17
  • 跟我一起数据挖掘(20)——网站日志挖掘

    跟我一起数据挖掘(20)——网站日志挖掘收集web日志的目的Web日志挖掘是指采用数据挖掘技术,对站点用户访问Web服务器过程中产生的日志数据进行分析处理,从而发现Web用户的访问模式和兴趣爱好等,这些信息对站点建设潜在有用的可理解的未知信息和知识,用于分析站点的被访问情况,辅助站点管理和决策支持等。1、以改进web站点设计为目标,通过挖掘用户聚类和用户的频繁访问路径,修改站点的页面之间的链接关系,以适应用户的访问习惯…

    2022年9月25日
    1
  • 【系统白程序利用】werfault.exe

    【系统白程序利用】werfault.exe#include"stdafx.h"#include<windows.h>int_tmain(intargc,_TCHAR*argv[]){//Getrootkeyhandle.HKEYhRoot=nullptr;LPCTSTRlpSubKey=L"Software\\Microsoft\\Windows\\Wi…

    2022年6月23日
    26
  • poj 2478 Farey Sequence(欧拉函数是基于寻求筛法素数)

    poj 2478 Farey Sequence(欧拉函数是基于寻求筛法素数)

    2022年1月1日
    89
  • 转置卷积详解

    转置卷积详解转置卷积详解  前面文章对卷积做了讲解,感觉既然重新整理,就将系列概念整体做个梳理,也算是将自己知道的所有东西拿来献丑把。  转置卷积(TransposedConvolution)是后来的叫法,一开始大家都是称逆卷积/反卷积(Deconvolution),这个概念是在图像分割任务中被提出来的,图像分割需要逐像素的操作,对每一个像素做一个分割,将其归类到不同的物体当中。  这个任务大家很自然…

    2022年6月21日
    38
  • inputstreamreader读取文件_更新数据的方式有三种

    inputstreamreader读取文件_更新数据的方式有三种/*InputStreamReader读数据的2种方式publicintread():一次读取一个字符publicintread(char[]cbuf):一次读取一个字符数组*/publicclassReaderDemo{ publicstaticvoidmain(String[]args)throwsIOException{ //创建字符输入流 …

    2022年9月26日
    0

发表回复

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

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