MySQL--全文索引作用、原理及使用注意
作用
MySQL索引可以分为:主键索引、普通索引、唯一索引、全文索引。其中,全文索引应该是是比较特殊的,它只有少数的几个存储引擎支持,且只有类型为char、vchar、text的列能建立全文索引。以前,只有MyISAM引擎支持全文索引,现在InnoDB也可以用了。
一般情况,对于模糊查询的情况最容易想到的就是 where ... like %_... 这样。确实,like 关键字在大都数情况下都能完成需求,但是在列的内容十分大的时候,like的性能就不能令人满意了,因为这个关键字并没有保证每次查询都能用上索引。因此,全文索引就派上用场。除了性能上的提高,全文索引提供了更灵活的服务,比如:
1. like 只是进行模式匹配,全文索引却提供了一些语法语义的查询功能,会将要查的字符串进行分词操作,这决定于MySQL的词库。
2. 全文索引可以自己设置词语的最小、最大长度,要忽略的词,这些都是可以设置的。
3. 用全文索引去某个列查一个字符串,会返回匹配度,可以理解为匹配的关键字个数,是个浮点数。
总之就是,全文索引因为用上了索引,性能更高,有词库支撑可以进行分词提供了一些语义查询的功能,有词语停用表忽略某些词语,有词语最大最小值可以设置等更灵活。
原理
全文索引的对象是一个“全文集合”,如果对表的多个列建立全文索引,MySQL就会将这几列拼接成一个字符串,然后进行索引。全文索引实际上也是B+ Tree结构,不过比较特殊,它一共有两层,第一层是所有的关键字,第二层则是每个关键字的一组指文档针,例如 “X” ->行1,行2,行3......。通俗解释全文索引结构就是:它是以关键字去找文档(行),而不是像其他一些索引以行主键来找其他列的内容。要使用全文索引,关于它的几个参数的意义一定要清楚,控制全文索引的参数都是以 ft 开头的(FullText)。查看这些参数以及它们的意义:
show variables like 'ft%'

ft_boolean_syntax:表示布尔查询时的可以用的符号。改变IN BOOLEAN MODE的查询字符,不用重新启动MySQL也不用重建索引
ft_max_word_len : 最长的索引字符串,默认值为84,修改后要重建索引
ft_min_word_len : 最短的索引字符串,默认值为4,修改后要重建索引
ft_query_expansion_limit: 查询括展时取最相关的几个值用作二次查询
ft_stopword_file (built-in): 停词文件,这个文件里的词查询时会忽略掉
使用方法及注意
首先建立全文索引,语句如下:
create fulltext index 索引名 on 表名(列名...)
使用语句:
where match(列名...) against(‘ 词语1 词语2 ’); //匹配词语1 词语2
如果要使用布尔查询或短语查询,如果使用短语的话,速度会慢很多,因为全文索引无法判断是否精确匹配了短语,得回表过滤。:
where match(列名...) against(‘ “短语1” ’); //在单引号里用双引号包裹一个短语,让返回结果精确匹配指定的短语
where match(列名...) against(‘ +词语1 -词语2 ’ IN BOOLEAN MODE); //返回结果必须含有词语1,但不能有词语2
where match(列名...) against(‘ >词语1 <词语2 ’ IN BOOLEAN MODE); //含有词语1的话优先级升高,含有词语2的话优先级降低
也可以把全文匹配的结果返回,这是一个浮点数,表示这一行关于这些词语的匹配度:
select id,match(列名...) against(' 词语1 ') as factor from 表名 where.... //返回每行匹配词语1的匹配度
全文索引带来的负面影响:
1. 占有存储空间更大,如果内存一次装不下全部索引,性能会非常差。
2. 增删改代价更大,修改文本中10个单词,则要操作维护索引10次,而不是普通索引的一次。
3. 如果一个列上有全文索引则一定会用上,即使有性能更好的其他索引也不会用上。由于只是存储文档指针,也就用不上索引覆盖。
总之就是性能不如普通索引,使用时要衡量一下。
MySQL--全文索引作用、原理及使用注意的更多相关文章
- MYSQL索引结构原理、性能分析与优化
[转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...
- 【转】由浅入深探究mysql索引结构原理、性能分析与优化
摘要: 第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1.简单介绍B-tree B+ tree树 2.MyisAM索引结构 3.Annode索引结构 4.MyisAM索引与Inno ...
- 重新学习MySQL数据库4:Mysql索引实现原理
重新学习Mysql数据库4:Mysql索引实现原理 MySQL索引类型 (https://www.cnblogs.com/luyucheng/p/6289714.html) 一.简介 MySQL目前主 ...
- MySQL全文索引应用简明教程
本文从以下几个方面介绍下MySQL全文索引的基础知识: MySQL全文索引的几个注意事项 全文索引的语法 几种搜索类型的简介 几种搜索类型的实例 全文索引的几个注意事项 搜索必须在类型为fulltex ...
- MySQL主从同步原理 部署【转】
一.主从的作用:1.可以当做一种备份方式2.用来实现读写分离,缓解一个数据库的压力二.MySQL主从备份原理master 上提供binlog ,slave 通过 I/O线程从 master拿取 bin ...
- MySql全文索引
使用索引是数据库性能优化的必备技能之一.在MySQL数据库中,有四种索引:聚集索引(主键索引).普通索引.唯一索引以及我们这里将要介绍的全文索引(FULLTEXT INDEX). 全文索引(也称全文检 ...
- MySQL InnoDB 索引原理
本文由 网易云发布. 作者:范鹏程,网易考拉海购 InnoDB是 MySQL最常用的存储引擎,了解InnoDB存储引擎的索引对于日常工作有很大的益处,索引的存在便是为了加速数据库行记录的检索.以下是 ...
- 数据库MySQL 之 索引原理与慢查询优化
数据库MySQL 之 索引原理与慢查询优化 浏览目录 索引介绍方法类型 聚合索引辅助索引 测试索引 正确使用索引 组合索引 注意事项 查询计划 慢查询日志 大数据量分页优化 一.索引介绍方法类型 1. ...
- MySQL Optimization 优化原理
MySQL Optimization 优化原理 MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. ...
- 十、mysql之索引原理与慢查询优化
mysql之索引原理与慢查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还 ...
随机推荐
- excel简单操作
百度网盘(npoi.dll): http://pan.baidu.com/s/14eJRw //先创建一个文件流,指向磁盘上的某个Excel文件 using (FileStream fsRead = ...
- maven 安装jar包命令
以 spring-context-support-3.1.0.RELEASE.jar 为例,在 @3图中已经给出这个 jar 包的 groupId,artifactId,version信息,手动安装的 ...
- 如何选择EDM电子邮件服务提供商
选择一家好的EDM电子邮件服务商非常重要,因为这可以让我们的EDM营销事半功倍,同时可以达到更好的营销效果.下面博主为大家介绍一下选择标准. 一.服务好不好. 这点很重要,当然这里的服务包括售前和售后 ...
- sqlalchemy 中 desc 的使用
是这样: items = Item.query.order_by(Item.date.desc()).all() 而不是这样: items = Item.query.order_by(desc(Ite ...
- 阶段3 1.Mybatis_09.Mybatis的多表操作_9 mybatis多对多操作-查询用户获取用户所包含的角色信息
sql语句以user作为主表 用户的全部信息,以为用户下的角色的.并不是所有的用户都有角色,有角色的就带角色.没角色的就为null 首先修改实体类 定义List<Role> 生成gette ...
- Unity3D-Canvas-UIScaleMode
UnityCanvasUI自适应部分 用Canvas下的自适应UI Scale Mode: Constant Pixel Size:固定像素大小,无论如何UI怎么样就怎么样,只能通过 Scale Fa ...
- 从企业版BOSS直聘,看求职简历技巧
有时候,不是我们不可以,而是我们连面试的机会都没有.希望这篇文章能帮助大家找工作,有一个展示自己的机会. [ ] 最近负责测试的面试工作,在等HR推简历的时候害怕错过优秀的伙伴,找HR拿到了公司在BO ...
- golang网络编程高并发
1 golang写服务器不需要epoll吗 golang写服务器不需要在用reactor模式的epoll了,因为golang的协程非常廉价,可以并发开启成千上完个协程. 一个协程占用内存大概2KB左右 ...
- http请求响应丢包问题
在与合作方联调某个明细数据接口的时候发现 1.当请求条数为4,content-length<1500时,数据可以正确返回. 2.当请求条数为5,content-length>1500时,无 ...
- Django文档——Model中的ForeignKey,ManyToManyField与OneToOneField 关联关系字段 (Relationship fields)
ForeignKey,ManyToManyField与OneToOneField分别在Model中定义多对一,多对多,一对一关系. 例如,一本书由一家出版社出版,一家出版社可以出版很多书.一本书由多个 ...