MySql索引采用的是B+树结构,与倒排索引相比,被称之为正排索引。
下面通过一个简单的例子,先理解B+树索引的工作方式,而后再介绍为什么会引入倒排索引。
有一张用户表,分别记录了用户名称和爱好。
CREATE TABLE user_info (
id int,
name varchar(16),
hobby varchar(256)
);
数据:
Id | name | hobby |
---|---|---|
1 | 小明 | 篮球、唱歌、游泳 |
2 | 小王 | 篮球、旅游 |
3 | 小李 | 台球、旅游 |
4 | 小蒋 | 唱歌、游泳 |
5 | 小董 | 游泳、台球 |
当查询有那些人喜爱游泳时,会使用如下的sql语句。
select * from user_info where hobby like '%篮球%'
由于B+树的最左匹配原则,这样查索引失效,进行全表扫描,查询效率自然不高。
想要快速查看怎么办?
倒排索引
针对喜好列创建倒排索引,可以得到如下结构:
Number | text | Documents |
---|---|---|
1 | 篮球 | 1、2 |
2 | 唱歌 | 1、4 |
3 | 旅游 | 2、3 |
4 | 台球 | 3、6 |
5 | 游泳 | 1、4、5 |
这样的话,查询出爱游泳的人就会非常快速了。
其中找出这些短语,就靠分词器,此处就不多提了。
与B+树索引相比,倒排索引适合根据中间内容进行搜索的场景。
推荐一篇讲的好的博文:
柳树的絮叨叨 http://bridgeforyou.cn/2019/07/23/Inverted-Index/