2023-03-20  阅读(54)
原文作者:简单教程 原文地址:https://www.twle.cn/c/yufei/innodb/innodb-basic-auto_increment.html

MySQL InnoDB 中的全文索引的最后一章节,我们来 InnoDB 全文索引中的那些处理逻辑,包括删除索引逻辑和事务逻辑。

InnoDB 全文索引删除处理

删除具有全文索引列的记录可能会带来辅助索引表中的大量小删除,使得对这些表的并发访问成为性能的瓶颈。

为避免此问题,每当从索引表中删除记录时,已删除文档的文档 ID ( DOC_ID ) 将记录在特殊的 FTS_*_DELETED 表中,同时全文索引仍然会保留索引记录。全文查询返回结果前,会自动过滤掉 FTS_*_ DELETED 表中存储的已删除的文档 ID。

这种设计的好处是删除快速且廉价。缺点是删除记录后索引的大小不会立即减少。

要删除已删除记录的全文索引条目,需要设置 innodb_optimize_fulltext_only = ON 在索引表上运行 OPTIMIZE TABLE 以重建全文索引。

InnoDB 全文检索事务处理

因为使用了缓存和批处理。InnoDB 全文索引的事务处理是非常特殊的。

具体来说,全文索引的更新和插入在事务提交时才真正处理,这意味着全文搜索只能看到已提交的数据。也就是不受事务处理四个级别的控制。

下面示例演示了这种事务处理方式。 全文搜索仅在提交插入的行后返回结果

    mysql> CREATE TABLE opening_lines (
           id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
           opening_line TEXT(500),
           author VARCHAR(200),
           title VARCHAR(200),
           FULLTEXT idx (opening_line)
           ) ENGINE=InnoDB;
    
    mysql> BEGIN;
    
    mysql> INSERT INTO opening_lines(opening_line,author,title) VALUES
           ('Call me Ishmael.','Herman Melville','Moby-Dick'),
           ('A screaming comes across the sky.','Thomas Pynchon','Gravity\'s Rainbow'),
           ('I am an invisible man.','Ralph Ellison','Invisible Man'),
           ('Where now? Who now? When now?','Samuel Beckett','The Unnamable'),
           ('It was love at first sight.','Joseph Heller','Catch-22'),
           ('All this happened, more or less.','Kurt Vonnegut','Slaughterhouse-Five'),
           ('Mrs. Dalloway said she would buy the flowers herself.','Virginia Woolf','Mrs. Dalloway'),
           ('It was a pleasure to burn.','Ray Bradbury','Fahrenheit 451');
    
    mysql> SELECT COUNT(*) FROM opening_lines WHERE MATCH(opening_line) AGAINST('Ishmael');
    +----------+
    | COUNT(*) |
    +----------+
    |        0 |
    +----------+
    
    mysql> COMMIT;
    
    mysql> SELECT COUNT(*) FROM opening_lines WHERE MATCH(opening_line) AGAINST('Ishmael');
    +----------+
    | COUNT(*) |
    +----------+
    |        1 |
    +----------+

MySQL InnoDB 全文索引监控

如果你想要监视和检查 InnoDB 全文索引的特殊文本处理方面,可以通过查询以下 INFORMATION_SCHEMA 表实现

  • INNODB_FT_CONFIG
  • INNODB_FT_INDEX_TABLE
  • INNODB_FT_INDEX_CACHE
  • INNODB_FT_DEFAULT_STOPWORD
  • INNODB_FT_DELETED
  • INNODB_FT_BEING_DELETED

你还可以通过查询 INNODB_INDEXESINNODB_TABLES 表来查看全文索引和表的基本信息。


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文