mysql 全文索引使用以及限制
项目场景:
最近在做性能优化,有使用到全文索引,做下记录。
问题描述
我们在做列表查询的时候,大多数情况都会遇到 like '%%'的查询,而这种查询会让索引失效
在数据量较大的时候,会让查询变得很慢,当然我们可以使用es去做优化,es的引入也会让代码变得复杂相对不使用来说,因此我们在没必要的时候就直接使用mysql就好了。
解决方案:
一、mysql 全文索引的限制,需要mysql版本在5.7及以上版本才支持,不知道版本的使用一下指令查看版本号。
select version();
二、建立索引sql如下
CREATE FULLTEXT INDEX idx_fullname ON t_course(name) WITH PARSER ngram;
CREATE FULLTEXT INDEX idx_fullname ON t_course_type(name) WITH PARSER ngram;
这里需要使用WITH PARSER ngram 适用于中文分词,如果要搜索的内容为英文,可以不加后面这段。
三、修改mysql配置如下,
在你的mysql安装目录下,找到该配置文件,D:\javaTools\mysql-8.0.12-winx64\my.ini,如果没有就自己新建一个。添加如下配置
innodb_ft_min_token_size = 1 #配置分词最小单位
ft_min_word_len = 1 #配置分词最小单位
修改完后需要重启才生效。
加这两个配置原因是要把粒度分到最小,如果不是,则有可能你搜,“你好”,内容含有 这两个字,你搜索不到,这两个值默认是4。所以要修改下。
重启完后使用指令查看配置是否生效
show variables like '%ft%';
四、使用全文索引搜索。
selecttc.id,tc.name
fromt_course tc
where
match(name) against ('测试') limit 5
可以看到测试相关的内容就查出来了,explain一下看看是否走索引。
可以看到是走了刚刚的全文索引。
五、多字段全文索引
CREATE FULLTEXT INDEX idx_fullname ON t_course(name,字段名) WITH PARSER ngram;
match(name,字段名) against ('测试')
像上面这样类似建立一个组合索引即可。
六、join查询两个表全文索引。
有一种情况是join查询,两个表都有字段要全文索引,这种情况经过测试,是不生效的,类似还有一个coursetype表name字段也全文索引。
explain selecttc.id,tc.name,tct.name,tct.id
fromt_course tc left join t_course_type tct on tc.course_type =tct.id
where
1=1
and (
match(tc.name) against ('测试')
or match(tct.name) against ('测试')
)
这样子是不会走索引的,同时模糊搜索课程的名字和类型名字。这种情况只能另外想办法解决了,可以考虑 使用
(a left join b where match(a.name) ) union (a right join b math(b.name))
这种方式去实现,这样sql复杂度提升了不少,其实不建议这样子用,还不如直接放es算了。
总结
介绍了下如何使用全文索引,要注意的点已经上面都有写了,替大家走了坑总结实践出来的使用方案,大家如果有需要可以参考下。
mysql 全文索引使用以及限制相关推荐
- InnoDB MySQL 全文索引 学习笔记
最近在学习MySQL全文索引的知识,基本搞清了功能以及使用方式,整理了相关资料分享出来一起学习进步哈 目录 1. 倒排索引 2. InnoDB全文检索 3. MySQL全文检索 3.1 Natural ...
- MySQL全文索引应用简明教程
MySQL全文索引应用简明教程 本文从以下几个方面介绍下MySQL全文索引的基础知识: MySQL全文索引的几个注意事项 全文索引的语法 几种搜索类型的简介 几种搜索类型的实例 全文索引的几个注意事项 ...
- mysql全文索引含义_【分针网】MySQL全文索引应用简明教程
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本文从以下几个方面介绍下MySQL全文索引的基础知识:1.MySQL全文索引的几个注意事项2.全文索引的语法3.几种搜索类型的简介4.几种搜索类型的实例 ...
- mysql全文索引中文问题的解决(转)
MySQL从3.23.23开始就逐渐支持全文索引和搜寻. 全文索引就是建index,全文搜寻就是去查index. LIKE是用Regular Expression去做查询. MySQL全文索引是 ...
- MySQL全文索引模糊查询_mysql全文索引之模糊查询
旧版的MySQL的全文索引只能用在MyISAM表格的char.varchar和text的字段上. 不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引,所以具体信息大家可以随时关注官网, ...
- mysql 全文索引 权重_MySQL中的全文索引
之前曾经发表了一篇关于SQL Server全文索引的文章.现在将MySQL全文索引的配置过程记录一下. Step1:创建Student表 CREATE TABLE `student` ( `id` I ...
- laravel自动建mysql索引_让 Laravel 优雅地创建 MySQL 全文索引
最近在浏览社区话题的时候,看到了一位同仁发表的一篇教程:Laravel 5.3 下通过 migrate 添加 "全文索引" 的方法,突然想到自己之前也研究过这一话题,所以今天就和大 ...
- mysql全文索引与停止词
#mysql全文索引与停止词/*1.全文索引(FULLTEXT INDEX) FULLTEXT索引仅可用于MyISAM表,不可用于INNODB表 2.全文索引在mysql的默认情况下,对于中文意义不大 ...
- MYSQL全文索引及Match() against()踩坑记录-超详细超实用
场景一 当我们使用mysql模糊查询时,经常会遇到如下情况: 如果我们customer_manager_no字段是可能会存多个值,用逗号隔开这种:当我们想查找出customer_manager_no字 ...
- Mysql全文索引性能测试对比
在关系型数据库中,使用like模糊查询,如果是 'xxx%'头匹配方式,字段索引不会失效,性能能接受:但如果是 '%xxx%'全文匹配方式,索引会失效,在数据量大的情况下,通过此种方式查询的效率极低. ...
最新文章
- 关于perl中变量内插问题的讨论
- 《Ajax基础教程》一书推荐的JS工具备忘
- 只允许在数据框中输入身份证号的js函数
- spark(1.1) mllib 源代码分析
- 遗传算法实例-求解函数极值
- mamcache登录、_gomemcache首页、文档和下载 - memcache客户端库 - Go语言中文网 - Golang中文社区...
- Apache开启Gzip压缩设置(转)
- C#单元测试如何查看输出的调试信息?
- 云龙51单片机视频教程+课件+程序代码+课后作业,零基础入门视频教程
- 人力资源术语英汉对照(zt)
- 使用Wps切分单页PDF文件为多页pdf
- 易起秀登录不了 显示服务器,制作的易企秀作品为什么找不到了?
- 测试用例设计—场景分析法
- win10将HTML动态做桌面壁纸,Win10 怎么制作动态界面壁纸
- 利用python生成微信h5_Python + Appium 微信公众号 H5 页面自动化测试
- 【4022】有些KPI的完成,╮(╯▽╰)╭
- 为什么c语言中会引入ASCII,C语言中ASCII码是什么意思?
- 基于C#的服装店进销存管理系统设计与实现
- 效法羲和驭天马,志在长空牧群星
- 【包管理器】vcpkg
热门文章
- Java 创建文件,文件夹不存在时,如何创建
- OPPOa8计算机怎么变成科学,oppoa8怎么设置返回键 虚拟导航键和全面屏手势都可以...
- spring security2.x 切换用户
- 拼团模式为什么会这么火?最完整的解析思路
- 什么时候不该使用es6箭头函数 1
- python如何处理视频之moviepy
- responsebody text html,utf-8在responseBody中得编码方式
- html中遍历map的值,map遍历的几种方式是什么
- 第一代计算机只能使用机器语言进行程序设计,20173计算机基础习题综合.doc
- 其他手机怎么安装鸿蒙系统,国内其它的手机厂家不想安装鸿蒙吗?