1. 定义与用途
- 定义: 专为
CHAR
, VARCHAR
, TEXT
列设计的特殊索引,旨在替代因全表扫描而导致性能低效的 LIKE '%...%'
查询。 - 用途: 实现大规模文本数据的高效关键词检索。
2. 核心原理
- 结构: 基于倒排索引 (Inverted Index) 实现。
- 机制: 创建“关键词 → 文档ID列表”的映射,通过关键词直接定位数据行,避免线性扫描。
3. 核心语法
- 创建索引:
CREATE FULLTEXT INDEX index_name ON table_name (column1, [column2, ...]);
- 查询:
SELECT * FROM table_name WHERE MATCH(column1, ...) AGAINST('keywords' [IN SEARCH_MODE]);
4. 实战 Demo
create table articles
(id int unsigned auto_increment not null primary key,title varchar(200),content text
);
insert into articles (title, content)
values ('mysql索引的重要性', '深入理解mysql的b+tree索引和全文索引。'),('全文索引实践', '学习如何在mysql中使用match against进行高效的文本搜索。'),('数据库性能优化', '索引是mysql性能优化的关键,但要避免过度索引。');create fulltext index ft_index on articles (content);explain select * from articles where match(content) against('全文索引');
5. 关键规则
MATCH
列的严格对应: MATCH()
函数中指定的列,必须与某个全文索引定义的列完全一致。- 与
LIKE
的独立性: LIKE
操作符永远不会使用全文索引。 - CJK 语言支持: 内置
ngram
解析器支持中文、日文、韩文的索引与查询。