文章地址:
一文给你讲清楚MySql全文索引实战和原理 - 掘金 (juejin.cn)
MySQL 模糊查询再也不用like+%了 (qq.com)
摘要
《MySQL 模糊查询再也不用like+%了》 摘要如下:
📔 一句话总结
InnoDB的全文检索使用倒排索引实现,支持自然语言搜索、布尔搜索和查询扩展搜索。
📖 文章摘要
1. InnoDB在模糊查询数据时使用'%xx'会导致索引失效,但有时需求就是如此,全文索引是为这种场景设计的。全文索引使用倒排索引实现,存储了单词与单词自身在文档中所在位置之间的映射。全文检索分为自然语言搜索、布尔搜索、查询扩展搜索三种类型。
2. 倒排索引是一种索引结构,存储了单词与单词自身在一个或多个文档中所在位置之间的映射。倒排索引可以根据单词直接得到包含查询关键字的文档,提供了更好的定位数据和其他搜索特性。
3. 全文检索分为自然语言搜索、布尔搜索、查询扩展搜索三种类型。自然语言搜索将搜索字符串解释为自然人类语言中的短语,布尔搜索使用特殊查询语言的规则解释搜索字符串,查询扩展搜索是对自然语言搜索的修改,用于查询关键词太短、用户需要隐含知识的情况。
4. 创建全文索引的语法是在创建表时使用CREATE TABLE语句,在已创建的表上使用CREATE FULLTEXT INDEX语句。全文索引只能在InnoDB或MyISAM的表上使用,并且只能用于创建char、varchar、text类型的列。
5. 使用MATCH() AGAINST()语法进行全文检索查询,MATCH()采用逗号分隔的列表,表示要搜索的列,AGAINST()接收一个要搜索的字符串和一个可选的搜索类型修饰符。全文检索的查询类型包括自然语言搜索、布尔搜索、查询扩展搜索。
原文共 4231 字,阅读需要约10分钟,思维导图、金句 等 点此查看
#知我AI
学到了什么?
mysql实现全文索引入门案例
创建表
create table test002.people
(
id int null,
name varchar(250) null
);
create fulltext index name_index_ft on test002.people (name);
导入数据
INSERT INTO test002.people (id, name) VALUES (1, 'a');
INSERT INTO test002.people (id, name) VALUES (2, 'aa');
INSERT INTO test002.people (id, name) VALUES (3, 'a+aaa');
INSERT INTO test002.people (id, name) VALUES (4, 'b+aaa');
INSERT INTO test002.people (id, name) VALUES (5, 'c+aaaa');
INSERT INTO test002.people (id, name) VALUES (6, 'aaa');
执行sql
select * from people where match(name) against('aaa' in boolean mode); # 3条
模糊搜索要加 *
select * from people where match(name) against('aaa*' in boolean mode); # 4条