mysql全文索引使用_mysql全文索引作用
chenpack 2025-06-26 22:30 29 浏览 0 评论
普通的工作日,很平常的一天。上午上班,和往常一样写代码,旁边的妹子有点异样,一副一筹莫展的样子,似乎被什么问题困扰了。
本着同事之间应该互相帮助的工作态度,尤其是漂亮女同事,我移动座椅到她旁边,问道:“怎么了,一副烦恼的样子,需要帮助吗?”
“我正想找你呢,你帮我看看这个问题,应该怎么优化?...” 妹子回答道,一副丧气的模样。
原来妹子碰到了这样一个难缠的问题,她负责的一个功能模块有一个关键之搜索功能,根据用户输入的关键字筛选MySQL表中的记录,这是一个模糊匹配的功能,被匹配的字段是text类型,她使用sql中的like功能实现这个需求,类似这样
select * from tb where content like %关键字%
在开发阶段,这么做没什么问题,所以没有人注意。然而随着项目的上线运营,数据量快速增长,这个功能运行变得很缓慢,有时候甚至要几十秒钟才能出结果,用户体验极差。运营同事将这个问题反馈到妹子这里,她不知道如何解决,所以满脸愁容。因为是一个text类型字段且使用like模糊匹配,根本没法利用索引,只能全表扫描,慢是肯定的,而且随着数据量的增长,还会变得更慢,直到最终功能不可用为止。
这种问题要是早些年还真不好解决,需要自己搭建分词系统或者用第三方搜索引擎如Sphinx、Lucene等解决,非常费事。但是到了MySQL 之后,InnoDB开始支持英文全文索引,MySQL 之后开始支持中文全文索引,利用全文索引,可以非常方便的解决like模糊匹配性能不佳问题,而我们用的MySQL,版本在这之后。
我们知道,MySQL InnoDB中当字段长度大于767bytes,相当于个字符时,就不能建立索引,因此text类型字段不可以建立索引。全文索引可以使用大容量字段可以建立索引,只是不是索引整个字段,而是将字段的内容拆分成一个一个词语,然后索引这些词语,在查询的时候,再通过特定的算法让索引与被查询的关键字匹配,跟B+树索引的运行方式类似,快速定位到记录。
找到方法后,我和妹子找到运维,让他把生产环境那张表的数据导一份到测试环境,然后在那个需要匹配的字段上创建一个全文索引
CREATE FULLTEXT INDEX content_full_text_index ON tableName (content) WITH PARSER ngram;
其中 WITH PARSER ngram 子句的作用是使这个全文索引支持中文,然后使用如下sql语句测试了效果
select * from log where match(content) AGAINST(+关键字 in boolean mode);
结果瞬出,几百万数据的表出结果只要几十毫秒,而妹子原来使用like时,出结果需要几十秒,足足快了一千倍。妹子看到这个结果,人都惊呆了,张大了嘴久久说不出话来。
我打断妹子发呆,说道:“你把查询语句改成全文索引匹配的语法,然后下个版本发布的时候让DBA在线上环境上建立这个索引就可以了”
妹子连连点头,激动的说不出话来。我微微一笑,转身回到自己的座位,深藏功与名。
相关推荐
- 讲真,网络工程师家里的wifi速度到底能有多快?
-
讲真,网络工程师家里的wifi速度到底能有多快?老杨身边挺多亲戚朋友总有这样的问题,wifi已经买的很高级了,可以信号还是不好。但是这件事情,对于咱们网络工程师来说,就是小case了。老杨今天就来解释...
- RouterOS 端口映射 (远程桌面)
-
一款功能强大的路由器系统-软路由-RouterOS推荐一款路由器系统,头条有很多喜欢使用软路由伙伴可能有很多都不知道RouterOS这个路由系统是,RouterOS是由拉脱维亚MikroTik...
- 神经网络中的编码器 神经网络视频编码
-
神经网络算法-一文搞懂Transformer(总体架构&三种注意力层)本文将从Transformer的本质、Transformer的原理、Transformer的应用三个方面,带您一...
- 必备资料103个WindowsXP运行命令
-
Windows中CMD最全命令行CMD命令:开始->运行(或者Windows+R)->键入cmd或command(在命令行里可以看到系统版本、文件系统版本)CMD命令锦集1.gpedit...
- 固态硬盘无法格式化怎么办
-
Windows中固态硬盘无法格式化怎么办?固态硬盘(简称SSD)是一种数据存储设备,与传统机械硬盘相比,它在许多方面表现得更好。因此,越来越多的用户希望使用固态硬盘,但是当人们购买固态硬盘后准备将其格...
- 手机信令数据分析_手机信令数据分析过程代码
-
清华大学公共管理学院刘志林教授:探索手机信令数据在城市治理中的应用中国发展网讯日前,由中国人民大学首都发展与战略研究院(以下简称“首发院”)主办的首都大讲堂(第7期)暨地方治理工作坊第二期在京举办。...
- python开发ping工具 ipad python开发工具
-
python之ping主机#coding=utf-8frompythonpingimportpingforiinrange,):ip=.+str(i)...
- 云容灾关键技术点简介_云容器技术
-
阿里云发布企业级云灾备解决方案:一键容灾、成本节省%5月日,阿里云对外发布了企业级云灾备解决方案。据介绍,此次发布的灾备解决方案来自阿里巴巴IT基础设施云化的灾备经验,完全省去灾备机房的建设规划,可大...
- 域名泛解析设置_域名解析包括泛域名解析
-
如何降低域名被恶意泛解析的风险买车用车不想被忽悠,就请关注缸微信号:kf12gang←长按可复制。我们每天将免费为您解答选车用车的相关问题。作者:QQ126058域名被恶意泛解析是域名安全最常见的问...
- 人人通云平台怎么注册 人人通云教学登录账号
-
世界那么大,她看到了:一个心理咨询师的十年心灵之旅来源:环球网“世界那么大,我想去看看。”十年前的那个春天,十个字的辞职信,戳中了无数国人的心,激起了无数个“诗和远方”的小梦想,被称为“史上最具情怀...
- 民用远程监控手机软件_民用远程监控手机软件下载
-
屏幕监控软件有哪些?3款好用的监控软件分享!管控摸鱼小case!作为企业管理者,我深知员工工作效率和信息安全的重要性。在日常管理中,我时常会遇到这样的难题:员工是否在认真工作?有没有利用公司资源做与工...
- 重量级!Maven史上最全教程,看了必懂
-
对8个MCP服务器框架的比较作者:FrankGoortani编译:小兰引言模型上下文协议(MCP)是一种新标准,用于以统一方式将AI助手(如LLM)与外部数据源和工具连接起来。自推出以来,各种框架已...
- 面试字节跳动,收到offer后我却拒绝了 ,给面试人的一些忠告!
-
面试字节跳动,我被面试官狂怼全过程!来源:https://www.zhihu.com/question//answer/人们都说,这个世界上有两种人注定单身,一种是太优秀的,另一种是太平凡的。我一听呀...
- ps1手柄 python Ps1手柄真假
-
别再花冤枉钱!教你一分钟辨别“真假”超皮秒▌什么是超皮秒?皮秒激光,就是每个激光发射的脉冲持续时间(脉宽)达到皮秒级别的激光;1ps等于的负次方秒,超皮秒其实是一种商业名称,本质上也是皮秒激光设备,我...
- 路由器接交换机UPLINK还是
-
最全攻略!网络小白也能看懂的交换机连接方法号主:老杨丨年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部中午好,我的网工朋友。在网络设备的世界里,交换机是不可或缺的存在。不同的连接方法...
你 发表评论:
欢迎- 一周热门
-
-
维基百科Wikipedia镜像网站列表
-
超炫html+css+javascript幻化3D相册 (含背景音乐)程序员表白必备
-
6款图片查看器,丝滑干净无广告!(图片查看器软件)
-
不能读取文件“itunes.library.itl”因为它是由更高级别的itunes所创建的
-
用java编写一个QQ群发信息_用java语言写qq聊天程序
-
StreamReader StringReader 区别 reader和inputstream的区别
-
安卓系统手机文件夹及其文件详细解析
-
Windows Server 2003 详细安装与配置
-
作为一名独立开发者,我是如何建立我的科技创业公司的
-
计算机集成制造系统有哪些_计算机集成制造系统有哪些类型
-
- 最近发表
- 标签列表
-
- int.tryparse (62)
- list转list (108)
- repeat函数 (66)
- git force (69)
- springboot /error (71)
- mysql 更新 (74)
- save as pdf (63)
- lock tables (66)
- 同步 异步 阻塞 非阻塞 (62)
- rsyslog (66)
- querystring (63)
- c++ override (70)
- css 动画库 (61)
- vsphere web client (65)
- int32_t (63)
- c# task.run (68)
- find -size (64)
- golang flag包 (70)
- 二维数组作为参数传入函数 (62)
- sudo su root (60)
- crontab 安装 (61)
- c# 数组转成list (60)
- 下拉按钮 (64)
- 滚动条美化 (61)
- stringutils (61)