当B+树无法满足索引要求时,比如根据前几个关键字来查询所有相关数据。
InnoDB 1.2.x版本开始支持全文检索
倒排索引
全文检索一般使用倒排索引来实现。倒排索引和B+树一样也是一种索引结构,它在辅助表中存储了单词与单词自身在一个或多个文档中所在位置的映射(1对多)。主要有两种表现形式:
- {单词,单词所在文档的ID}
- {单词,(单词所在文档的ID,在文档中的具体位置)}
比如一个表t存储的内容如下图:
然后倒排索引会根据相关的word来构造一个关联数组,如下图:
如果是按照第二种格式来存储,即还要存储word在文档中的位置的话:
InnoDB全文检索
1.2.x版本开始支持全文检索,采用了第二种full inverted index方式,把(DocumentID,Position)视为一个list。
InnoDB为了提高全文检索的并行性能,设置了6个辅助表,每张表根据word的Latin编码来进行排序分区。
这6张表是持久表,存在磁盘上,InnoBD为了他踢高检索性能,也搞了一个FTS Index Cache(全文检索索引缓存),这个缓存时一个红黑树,根据(word,list)进行排序,在插入数据的时候会动态的更新表,然后再批量的刷新到磁盘的表上。
数据库关闭时FTS Index Cache中的数据库会同步到磁盘上的Auxiliary table上。
参数innodb_ft_cache_size来控制FTS Index Cache的大小。默认是32M