MySQLInnoDB中的全文索引的最后一章节,我们来InnoDB全文索引中的那些处理逻辑,包括删除索引逻辑和事务逻辑。InnoDB全文索引删除处理删除具有全文索引列的记录可能会带来辅助索引表中的大量小删除,使得对这些表的并发访问成为性能的瓶颈。为避免此问题,每当从索引表中删除记录时,已删除文档的文档ID(DOC_ID)将记录在特殊的FTS_*_DELETED表中,同时全文索引仍然会保留索引记录。全文查询返回结果前,会自动过滤掉FTS_*_DELETED表中存储的已删除的文档ID。这种设计的好处是删除快速且廉价。缺点是删除记录后索引的大小不会立即减少。要删除已删除记录的全文索引条目,需要设置i
在「MySQLInnoDB中的全文检索索引(上)」章节中,我们学习了MySQLInnoDB全文索引的相关的表。当插入文档时,会对其进行分词,也就是Token化,并将单个单词和相关数据插入到全文索引中。InnoDB全文索引缓存这个过程,即使要插入的文档非常小,也可能会导致在辅助索引表中进行大量的小插入,从而使这些表的并发访问成为性能的瓶颈。为了避免此问题,InnoDB使用全文索引缓存(cache)来临时缓存最近要插入到辅助索引表中的行。此内存缓存结构会一直持有插入的数据,直到缓存已满,然后批量将它们刷新到磁盘(到辅助索引表)。我们可以通过查询INFORMATION_SCHEMA.INNODB_F
在基于文本类型的列(char、varchar和text)上创建全文(FULLTEXT)索引,并忽略任何定义为停用词的单词,可以加快对这些列中包含的数据的查询和DML操作。可以在使用CREATETABLE语句创建表时指定全文索引,也可以在创建表之后使用ALTERTABLE或CREATEINDEX将全文索引添加到现有表中全文索引的使用方式一般为使用MATCH()...AGAINST语法执行全文搜索。InnoDB全文索引设计InnoDB全文索引采用了「倒排」索引的设计方式。倒排索引存储单词列表,并为每个单词存储单词出现的文档列表。为了支持邻近搜索,每隔单词的位置信息(字节偏移)也会被同时存储。Inn