全文索引详解(基于InnoDB引擎)

注:以下部分内容来自《MySQL技术内幕:InnoDB存储引擎》,以及我个人的一些理解和引申。如有侵权,请联系我删除,谢谢!

文章目录

一、为什么需要全文索引

二、全文索引

1.定义

2.Inverted Index(倒排索引)

三、InnoDB的实现

1. Auxiliary Table(辅助表)

2. FTS Index Cache(全文检索索引缓存)

为什么是红黑树?

和Change Buffer对比

3. FTS Document ID

4. Stopword List

5. 其他限制

四、使用全文检索

Natural Language

Boolean

Query Expansion


一、为什么需要全文索引

我们都知道,InnoDB中主要使用B+树作为索引(以及少量的哈希索引,主要是自适应哈希)。根据B+树的特点,我们可以在有索引的情况下,使用索引的前缀进行查找,例如,检索以“Covid”作为标题开头的疫情新闻:

SELECT * FROM news WHERE topic LIKE 'Covid%';

这是可以实现的。(注意,这里和索引的最左匹配原则没有关系。由于LIKE关键字,这里使用的是范围查询,而最左匹配原则在遇到范围查询时无效。)

然而当我们需要将查询的关键字不在字段的开头(更多情况下的确是这样),那么我们的B+树索引就无法奏效了,例如,检索标题包含“Covid”的疫情新闻:

SELECT * FROM news WHERE topic LIKE '%Covid%';

那么这时,就需要全文索引了。


二、全文索引

1.定义

书上是这样定义全文索引的:

全文索引(Full-Text Search)是将存储于数据库中的整本书或整篇文章中的任意内容信息查找出来的技术。它可以根据需要获得全文中有关章、节、段、句、词等信息,也可以进行各种分析和统计。

讲的很清楚。

2.Inverted Index(倒排索引)

之前一直听过倒排索引(比如ElasticSearch里面),读完书才发现,倒排索引实际上是全文索引的一种常见的实现。它的概念和B+树的索引是等级的。

倒排索引有两种具体的表现形式:

  • Inverted File Index,表现形式为(单词,单词所在文档ID)
  • Full Inverted Index,表现形式为(单词,(单词所在文档ID,具体位置))

可以看到,二者的差别主要是后者多存储了一个文档中的具体位置,虽然需要维护额外的存储空间,但也更方便我们迅速找到相应的具体段落。InnoDB中的实现也是基于后者的。


三、InnoDB的实现

InnoDB从1.2.x版本开始支持全文索引。

1. Auxiliary Table(辅助表)

作为索引,肯定需要空间进行存储。对于全文索引来说,存储索引的地方即是Auxiliary Table

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InnoDBMySQL 关系型数据库管理系统的一种存储引擎。它使用了一种称为"多版本并发控制"(MVCC)的技术来提供高性能和高并发性能。下面是 InnoDB 存储引擎的架构详解: 1. 缓冲池(Buffer Pool):InnoDB 使用了一个内存缓冲池来存储数据和索引。这个缓冲池是 InnoDB 存储引擎的关键组件,它用于减少磁盘 I/O 操作,提高性能。当数据被修改时,首先会被写入缓冲池中,然后再由后台线程将其刷新到磁盘。 2. 重做日志(Redo Log):InnoDB 使用了重做日志来保证事务的持久性。重做日志记录了对数据库进行的所有修改操作,包括插入、更新和删除操作。当系统崩溃或发生故障时,可以通过重做日志来恢复数据库的一致性。 3. 数据文件:InnoDB 将数据和索引存储在数据文件中。每个表都有一个对应的数据文件,其中包含了表的数据和索引信息。InnoDB 支持自动扩展和自动收缩数据文件的功能。 4. 页(Page):InnoDB 将数据和索引分成固定大小的页来管理。默认情况下,一个页的大小为 16KB。每个页都有一个唯一的标识符,称为页号。InnoDB 使用这些页来存储数据和索引。 5. 事务管理:InnoDB 支持事务的 ACID 特性(原子性、一致性、隔离性和持久性)。它使用了多版本并发控制(MVCC)来实现高并发性能和数据一致性。 6. 锁机制:InnoDB 使用了行级锁来控制并发访问。这意味着多个事务可以同时读取同一张表的不同行,而不会相互阻塞。只有当多个事务尝试修改同一行时,才会发生冲突。 总的来说,InnoDB 存储引擎的架构设计旨在提供高性能、高并发性能和数据一致性。它通过缓冲池、重做日志、数据文件、页、事务管理和锁机制等组件来实现这些目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值