MYSQL全文索引及Match() against()踩坑记录-超详细超实用

这篇具有很好参考价值的文章主要介绍了MYSQL全文索引及Match() against()踩坑记录-超详细超实用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景一

当我们使用mysql模糊查询时,经常会遇到如下情况:
mysql match,MySql,mysql,数据库,全文检索
如果我们customer_manager_no字段是可能会存多个值,用逗号隔开这种;当我们想查找出customer_manager_no字段包含:'wgx2’的数据,可能我们会直接想到如下写法:
mysql match,MySql,mysql,数据库,全文检索
但这样肯定不正确;字段包含:‘wgx22’的数据也出来了;那我们改怎么做呢?
可能一通百度;我们会看到如下写法:
mysql match,MySql,mysql,数据库,全文检索
这样确实可以解决问题了。

但是上面的写法会有如下的问题:

1.like关键字‘%obj%’这种写法是不会走索引的,‘obj%’这种使用索引;但是达不到查询效果。
2.FIND_IN_SET()函数能达到查询效果,但是不会走索引;如果数据量达到几万及以上,效率会非常慢;甚至造成系统无法运行。

问题解决方案:MYSQL全文索引及Match() against()

全文检索在 MySQL 中就是一个 FULLTEXT 类型索引。

一、创建全文索引
格式:
create fulltext index 索引名 on 表名(字段名1,字段名2...);
二、使用全文索引及Match() against()函数
1.基本用法
SELECT a.customer_id,a.customer_no,a.customer_name,a.customer_manager_no,
	   a.customer_manager_name,a.trust_manager_no
from customer_base_info a 
where Match(a.customer_manager_no) Against('wgx2' )
2.扩展用法

当然Match() against()函数还有相应的扩展用法;比如:

格式
select 字段 from 表名 where match(字段) against('搜索字符串' with query expansion);

机制:
首先,进行一个基本的全文本搜索,找出与搜索条件匹配的所有行
其次,Mysql检查这些匹配行并选择所有有用的词
再次,Mysql再次进行全文本搜索,这次不仅使用原来的条件,而且还使用所有有用的词
3.布尔文本搜索
格式
select 字段 from 表名 where match(字段) against('需要的词 其他条件的词' in boolean mode);
机制:

要匹配的词
要排斥的词(如果某行包含这个词,则不返回该行,即使它包含其他指定的词)
排列提示(指定某些词比其他词更重要,更重要的词等级更高)
表达式分组
另外一些内容

布尔操作符说明:
+	包含,词必须存在
-	排除,词必须不出现
>	包含,而且增加等级值
<	包含,且减少等级值
()	把词组成子表达式(允许这些子表达式作为一个组被包含、排除、排列等)
~	取消一个词的排序值
*	词尾的通配符
""	定义一个短语(与单个词的列表不样,它匹配整个短语以便包含或排除这个短语)
三、使用条件

1.存储引擎必须是MyISAM或者mysql5.6以上的InnoDB
2.字段类型必须是char,varchar,text
3.如果存储引擎必须是MyISAM,由于Mysql默认配置的索引词长是4,所以要支持中文单字的话,首先要修改ft_min_word_len参数;如果是2可能会出现搜索不到数字或者英文的情况,可以改为1,一般是/etc/my.cnf,如果没找到
4.如果存储引擎必须是InnoDB,改了ft_min_word_len参数为1;1个、2个数字或字母还是起不到搜索的效果;查不出数据这是一个坑;必须要将innodb_ft_min_token_size的值改为1才行;亲测有效。

四、索引使用分析
1.适用场景

1)表中该字段中的数据量庞大
2)经常被检索,经常出现在where子句中的字段
3)经常被DML操作的字段不建议添加索引

2.优点

1)大大提高检索数据的性能效率
2)在表连接的连接条件,可以加速表与表直接的相连
3)在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)

3.缺点

1)创建与维护索引会消耗时间,并随着数据量的增加而增加
2)索引也会占用物理存储空间
3)在进行DML操作的时候,索引也要动态的维护,会降低数据的维护速度文章来源地址https://www.toymoban.com/news/detail-783986.html

到了这里,关于MYSQL全文索引及Match() against()踩坑记录-超详细超实用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql 全文索引查询所用关键词最小长度限制

    这个是要分引擎的,InnoDB 引擎默认最小 3 个长度,MyISAM 引擎默认最小 4 个长度。 之前从网上搜索,修改ft_min_word_len配置项,并不起作用,仔细查了一下相关资料,发现原因如下: 对,我的数据库引擎是InnoDB,所以要修改 innodb_ft_min_token_size 这个配置项。 这个配置项,需要在

    2024年02月11日
    浏览(57)
  • ElasticSearch系列 - SpringBoot整合ES之全文搜索匹配查询 match

    官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/index.html 权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/structured-search.html 1. 数据准备 官方测试数据下载地址:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip ,数据量很大,我们自己构造数据吧。 2. m

    2023年04月08日
    浏览(51)
  • DataEase二开记录--踩坑和详细步骤(一)

    最近在看DataEase,发现挺好用的,推荐使用。 用的过程中萌生了二开的想法,于是自己玩了玩,并做了一些记录。 下载源码,选稳定版本的,本案例是1.17.0版本。 下载地址 开源社区 - FIT2CLOUD 飞致云 数据库配置 数据库初始化: DataEase 使用 MySQL 数据库,推荐使用 MySQL 5.7 版本

    2024年02月07日
    浏览(37)
  • DataEase二开记录--踩坑和详细步骤(二)

    建议先看第一篇 DataEase二开记录–踩坑和详细步骤(一) maven打包 clean - package 在backend/target 目录下就会出现 backend-1.xx.0.jar,这就是我们 DataEase 的镜像 jar 包。 修改docker配置文件 开放2375端口,用于和idea的连接 idea安装docker插件 Settings - Plugins 安装后就可以创建docker 编辑doc

    2024年02月04日
    浏览(33)
  • 跨域问题踩坑记录——附多种报错详细解决方案

    跨域是出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,当一个请求url的 协议、域名、端口 三者之间任意一个与当前页面url不同即为跨域。 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的

    2024年02月04日
    浏览(43)
  • 详细介绍mysql索引类型

    表示普通索引,大多数情况下都可以使用 表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为 unique 约束唯一标识数据库表中的每一条记录,即在单表中不能用每条记录是唯一的(例如身份证就是唯一的), Unique (要求列唯一

    2024年02月10日
    浏览(32)
  • MySQL索引最全详细汇总

    目录 1、概念 2、索引的优势和劣势 3、MYSQL索引数据结构 各存储引擎的支持 1)二叉搜索树 2)红黑树 3)B Trees 4)B+ Trees 4、索引分类 5、什么情况建立索引 6、什么情况不建立索引 7、操作索引 1)创建语法 2)创建语法二 3)全文检索

    2023年04月25日
    浏览(28)
  • 全文索引搜索引擎Zinc

    什么是 Zinc ? ZincSearch 是一个搜索引擎,可用于文本数据、日志、指标、事件等。它允许您进行全文搜索,包括将服务器日志发送到 ZincSearch 、推送您的应用程序数据、提供全文搜索或在您的应用程序中构建搜索栏。具备与 Elasticsearch API 的兼容性,因此您可以轻松迁移应用程

    2024年02月06日
    浏览(70)
  • ElasticSearch:全文检索及倒排索引原理

    首先介绍一下结构化与非结构化数据: 结构化数据将数据具有的特征事先以结构化的形式定义好,数据有固定的格式或有限的长度。典型的结构化数据就是传统关系型数据库的表结构,数据特征直接体现在表结构的字段上,所以根据某一特征做数据检索很直接,速度也比较快

    2024年02月14日
    浏览(40)
  • 大文本的全文检索方案附件索引

    Elasticsearch 附件索引是需要插件支持的功能,它允许将文件内容附加到 Elasticsearch 文档中,并对这些附件内容进行全文检索。本文将带你了解索引附件的原理和使用方法,并通过一个实际示例来说明如何在 Elasticsearch 中索引和检索文件附件。 索引附件的核心原理是通过 Inges

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包