当前位置: 首页 > news >正文

MySQL全文索引

在MySQL中,全文索引(Full-Text Index) 是一种专门为文本数据设计的索引类型,用于高效处理自然语言搜索(如文章内容、评论、关键词匹配等)。与传统的B-Tree索引相比,全文索引在处理大量文本数据时性能更优,且支持更复杂的搜索语法。

核心概念

  1. 适用场景

    • 文本字段(CHARVARCHARTEXT)的模糊搜索。
    • 关键词匹配、短语搜索、语义搜索等。
  2. 索引原理

    • 分词(Tokenizer):将文本拆分为词元(Tokens)。
    • 去重和排序:构建倒排索引(Inverted Index),记录每个词元出现的位置。
  3. 支持的存储引擎

    • InnoDB(MySQL 5.6+)和 MyISAM。

创建全文索引

单字段索引
CREATE TABLE articles (id INT PRIMARY KEY,title VARCHAR(255),content TEXT,FULLTEXT(title, content)  -- 创建联合全文索引
);
ALTER TABLE添加索引
ALTER TABLE articles ADD FULLTEXT(title, content);
索引选项
  • 最小/最大词长:通过ft_min_word_lenft_max_word_len配置(默认4和84字节)。
  • 停用词(Stopwords):忽略常见词(如"the"、“and”),可自定义。

全文搜索语法

自然语言模式(Natural Language Mode)
SELECT * 
FROM articles 
WHERE MATCH(title, content) AGAINST('MySQL索引优化' IN NATURAL LANGUAGE MODE);
  • 匹配包含关键词的文档,按相关性排序。
布尔模式(Boolean Mode)

支持高级搜索操作符:

SELECT * 
FROM articles 
WHERE MATCH(title, content) AGAINST('+MySQL +"索引优化"'  -- 必须包含"MySQL"和短语"索引优化"IN BOOLEAN MODE
);

常用操作符:

  • +:必须包含。
  • -:必须排除。
  • *:前缀匹配(如MySQL*匹配"MySQL"、“MySQL优化”)。
  • ":短语匹配(如"数据库设计")。

全文索引与LIKE的对比

特性LIKE ‘%关键词%’全文索引(MATCH AGAINST)
性能全表扫描,数据量大时极慢索引扫描,速度快
语法灵活性仅支持简单模糊匹配支持布尔逻辑、短语搜索、权重
分词处理不支持,需手动处理自动分词(如中文需自定义分词)
排序方式无特定顺序按相关性评分排序
适用场景少量数据的简单模糊查询大量文本的复杂搜索

中文全文索引优化

  1. 分词问题
    MySQL内置分词器对中文支持不佳(默认按空格分词),需使用第三方插件(如ngram分词器):

    -- 启用ngram分词器
    ALTER TABLE articles ADD FULLTEXT(title, content) WITH PARSER ngram;
    
  2. 最小词长调整

    -- 修改配置文件my.cnf
    ft_min_word_len = 1-- 重建索引使配置生效
    ALTER TABLE articles DROP INDEX idx_ft;
    ALTER TABLE articles ADD FULLTEXT(title, content);
    

性能注意事项

  1. 索引更新开销
    全文索引的维护成本高于普通索引,写入操作可能变慢。

  2. 查询优化

    • 避免在MATCH字段上使用函数(如UPPER()),会导致索引失效。
    • 复合查询中,全文索引条件应放在WHERE子句的前面。
  3. 索引大小
    全文索引通常比原数据大,需预留足够磁盘空间。

EXPLAIN验证全文索引

EXPLAIN SELECT * FROM articles WHERE MATCH(title, content) AGAINST('MySQL');
  • type列显示fulltext:表示使用了全文索引。
  • Extra列显示Using where:表示通过全文索引过滤结果。

适用场景

  • 全文索引不适用于 OLTP 场景。
http://www.lqws.cn/news/183619.html

相关文章:

  • MiniExcel模板填充Excel导出
  • MySQL用户和授权
  • Excel 模拟分析之单变量求解简单应用
  • <2>-MySQL库的操作
  • daz3d + PBRSkin (MDL)+ SSS
  • 全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
  • 边缘计算网关提升水产养殖尾水处理的远程运维效率
  • Nestjs框架: nestjs-schedule模块注册流程,源码解析与定时备份数据库
  • 智能终端与边缘计算按章复习
  • 多模态+空间智能:考拉悠然以AI+智慧灯杆,点亮城市治理新方式
  • Git 操作
  • 学习 React【Plan - June - Week 1】
  • 智能化弱电工程项目管理培训
  • 掌握子网划分:优化IP分配与管理
  • 使用React+ant Table 实现 表格无限循环滚动播放
  • 智能对联网页小程序的仓颉之旅
  • JAVA理论-JAVA基础知识
  • 中国制造名牌剃须刀:优质之选,情礼佳物
  • 中小制造企业的数字化转型,如何控制工业软件应用成本?
  • 中国移动6周年!
  • 手写muduo网络库(零):多线程中使用 weakptr 跨线程监听生命状态
  • 智绅科技 —— 智慧养老 + 数字健康,构筑银发时代安全防护网
  • 微算法科技(NASDAQ:MLGO)基于信任的集成共识和灰狼优化(GWO)算法,搭建高信任水平的区块链网络
  • K8S认证|CKS题库+答案| 3. 默认网络策略
  • 郑州工程技术学院赴埃文科技开展访企拓岗促就业活动
  • 第三方测试机构进行科技成果鉴定测试有什么价值
  • JeecgBoot低代码管理平台
  • 沙市区举办资本市场赋能培训会 点赋科技分享智能消费新实践
  • 超大规模芯片验证:基于AMD VP1902的S8-100原型验证系统实测性能翻倍
  • 因泰立科技H1X激光雷达:因泰立科技为智慧工业注入新动力