我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL 全文索引的原理与缺陷

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL 全文索引的原理与缺陷

MySQL全文索引一种特殊的索引,它会把某个数据表的某个数据列出现过的所有单词生成一份清单。

alter table tablename add fulltext(column1,column2)

说明:

只能在MyISAM数据表中创建

全文索引是以空格或标点隔开才能搜到的,搜中文是搜不到(有专门的应用支持中文分词可以搜中文,但都不理想)

少于3个字符的单词不会被包含在全文索引里,可以通过修改my.cnf修改选项

ft_min_word_len=3

重新启动MySQL服务器,用repair table tablename quick 为有关数据表重新生成全文索引


select * from tablename where match(column1,column2) against('word1 word2 word3')>0.001

match ... against 把column1,column2数据列中至少包含word1,word2,word3三个单词之一的数据记录查找到,在关键字match后的数据列必须 跟创建全文索引的数据列相同,检索词不区分大小写和先后顺序,少于3个字符的单词通常被忽略。match... against ...表达式返回一个浮点数作为它本身的求值结果,这个数字反映了结果记录与被检索单词的匹配程度。如果没有匹配到任何记录,或者匹配到的结果记录太多反 而被忽略,表达式将返回0,表达式>0.001的作用是排除match的返回值太小的结果记录。


select *,match(column1,column2) against ('word1 word2 word3') as mtch
from tablename
having mtch>0.01
order by mtch desc
limit 5

找出最匹配的5条记录,在where字句中不能使用假名,所以用having

布尔全文搜索的性能支持以下操作符:

+word:一个前导的加号表示该单词必须 出现在返回的每一行的开头位置。

-word: 一个前导的减号表示该单词一定不能出现在任何返回的行中。

(无操作符):在默认状态下(当没有指定 + 或?的情况下),该单词可有可无,但含有该单词的行等级较高。这和MATCH() ... AGAINST()不使用IN BOOLEAN MODE修改程序时的运作很类似。

> <这两个操作符用来改变一个单词对赋予某一行的相关值的影响。 > 操作符增强其影响,而 <操作符则减弱其影响。请参见下面的例子。

( )括号用来将单词分成子表达式。括入括号的部分可以被嵌套。

~word:一个前导的代字号用作否定符, 用来否定单词对该行相关性的影响。 这对于标记“noise(无用信息)”的单词很有用。包含这类单词的行较其它行等级低。

word* :搜索以word开头的单词,只允许出现在单词的末尾

"word1 word" :给定单词必须出现在数据记录中,先后顺序也必须匹配,区分字母大小写


select * from tablename where match(column1,column2) against ('+word1 +word2 -word3' in boolean mode')

布尔检索只能返回1或者0,不再返回表示匹配程度的浮点数

全文索引的缺陷:

数据表越大,全文索引效果好,比较小的数据表会返回一些难以理解的结果。

全文检索以整个单词作为匹配对象,单词变形(加上后缀,复数形式),就被认为另一个单词。

只有由字母,数字,单引号,下划线构成的字符串被认为是单词,带注音符号的字母仍是字母,像C++不再认为是单词

不区分大小写

只能在MyISAM上使用

全文索引创建速度慢,而且对有全文索引的各种数据修改操作也慢

不支持中文

以上就是MySQL 全文索引的原理与缺陷的详细内容,更多关于MySQL 全文索引的资料请关注自学编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL 全文索引的原理与缺陷

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL 全文索引的原理与缺陷

MySQL全文索引一种特殊的索引,它会把某个数据表的某个数据列出现过的所有单词生成一份清单。alter table tablename add fulltext(column1,column2)说明: 只能在MyISAM数据表中创建 全文索
2022-05-10

mysql全文索引实现的原理是什么

MySQL全文索引实现的原理主要是利用倒排索引和自然语言处理技术。具体步骤如下:创建全文索引:在创建表时,可以为需要进行全文检索的字段添加全文索引。全文索引会将文本按照单词进行分割,并建立倒排索引,记录每个单词在文档中的位置。分词处理:当用
mysql全文索引实现的原理是什么
2024-04-18

PHP与MySQL索引的原理及优化方法

引言:在开发和维护一个功能强大的数据库应用程序时,索引是一个重要的概念,它可以显著提高数据库查询的效率。本文将介绍PHP与MySQL索引的原理和优化方法,并提供一些具体的代码示例。一、索引的原理索引是一种数据结构,它可以帮助数据库引擎快速定
2023-10-21

mysql索引原理与用法实例分析

本文实例讲述了mysql索引原理与用法。分享给大家供大家参考,具体如下: 本文内容:什么是索引创建索引普通索引唯一索引全文索引单列索引多列索引查看索引删除索引首发日期:2018-04-14什么是索引:索引可以帮助快速查找数据而基本上索引都要
2022-05-29

mysql索引的使用和原理

索引是用于快速查找数据库数据的指针,它基于 b 树结构组织。mysql 支持各种索引类型,包括 b-tree、哈希、全文和空间索引。创建索引对于经常查询的列、连接表的键以及排序和分组的列非常重要。维护索引涉及在数据更改时更新和优化索引,并监
mysql索引的使用和原理
2024-08-01

MySQL的InnoDB索引原理详解

摘要:本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档)。本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISA
2022-05-18

MySQL索引的原理与优化策略是什么

这篇文章主要介绍了MySQL索引的原理与优化策略是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL索引的原理与优化策略是什么文章都会有所收获,下面我们一起来看看吧。索引的概念MySQL索引是一种用于
2023-07-05

Xunsearch全文搜索引擎的工作原理与优势分析(Xunsearch是如何实现高效全文搜索的?)

Xunsearch全文搜索引擎通过文档分词、词元索引、评分计算和结果排序实现高效搜索。其优势包括高效搜索、可扩展性强、灵活定制、支持多种数据源、丰富功能和开源免费。Xunsearch采用倒排索引结构、分布式架构和高效查询执行算法等技术来实现高性能。
Xunsearch全文搜索引擎的工作原理与优势分析(Xunsearch是如何实现高效全文搜索的?)
2024-04-02

MongoDB的文本搜索与全文索引怎么实现

MongoDB中的文本搜索和全文索引可以通过创建文本索引来实现。文本索引可以帮助MongoDB在文本字段上执行全文搜索,以查找包含特定关键词或短语的文档。要在MongoDB中实现文本搜索和全文索引,可以按照以下步骤操作:创建文本索引:使用
MongoDB的文本搜索与全文索引怎么实现
2024-05-07

PHP与MySQL索引的原理和底层实现细节

MySQL是一种非常流行的关系型数据库管理系统,而PHP是一种广泛用于开发Web应用程序的服务器端脚本语言。在开发Web应用程序时,经常需要与数据库进行交互,而索引是提高数据库查询性能的重要机制之一。本文将介绍PHP与MySQL索引的原理和
2023-10-21

编程热搜

目录