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左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还 ...
随机推荐
- 2、maven仓库位置设置
根据我们maven的安装目录找到config文件夹,并找到下面的setting.xml文件,在该文件里面添加下面的代码: <localRepository>F:\apache-maven- ...
- [转]delphi 防止刷新时闪烁的终极解决办法
{ 防止刷新时闪烁的终极解决办法(对付双缓冲无效时) }Perform($000B, 0, 0); //锁屏幕 防止闪烁 // 做一些会发生严重闪烁的事情.. //解锁屏幕并重画Perform($00 ...
- Jmeter之if控制器
在使用中,一些操作可以执行,需要满足一些特定的条件,这个时候就可以使用if控制器去控制. 一.界面显示 二.配置说明 1.名称:标识,建议设置为判断的功能 2.注释:说明 3.条件:是指需要满足那种条 ...
- lambda一些查询语句
<!--得分数据结构-->1 <Score> <studentid>1</studentid> <courseid>1</course ...
- 算法初级(scala)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum 1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为 ...
- vue--路由嵌套
路由嵌套的SPA实现的步骤: A(/a)组件需要嵌套B组件(/b)和C组件(/c) ①准备嵌套其它组价的父组件 指定一个容器在A组件指定一个容器<router-view></rout ...
- MySQL知识集合
1.Mysql体系架构 2.MySQL文件结构 (1)参数文件:启动MySQL实例的时候,指定一些初始化参数,比如缓冲池大小.数据库文件路径.用户名密码等 -my.cnf读取优 ...
- Linux常用命令基础
linux 常用指令 基础命令 宿主目录 目录结构 文件管理 目录管理 用户管理 别名管理 压缩包管理 网络设置 shell技巧 帮助方法 /表示根目录 ~表示家目录 软件的安装(光盘中的软件呢): ...
- windows上zeal安装和使用--离线API文档
1.官网:https://zealdocs.org/download.html#windows 2.github:https://github.com/zealdocs/zeal 3.下载:可下载安装 ...
- django商城项目之用sentry管理日志
之前写商城项目的时候,采用的日志处理方式为在终端输出或者写入文件,这样的话,项目部署上线之后,若服务器出现错误,需要到服务器查看相关的错误日志,很不方便.后期在学习别人开源项目的时候,学习到一个开源的 ...