当前位置: 首页 > news >正文

mysql-INNODB_FT_INDEX_TABLE表中的 first_doc_id 和、last_doc_id 和doc_id

例子:如果一张表有10行记录,name字段都是“male”,现在对name建立全文索引

好的,让我们详细分析一下你描述的场景,并解释在这种情况下 INNODB_FT_INDEX_TABLE 中会存储哪些记录。


场景描述

  1. 你有一张表,包含 10 行记录。
  2. 每一行的 name 字段值都为 "male"
  3. name 字段创建了全文索引(FULLTEXT INDEX)。

我们需要回答的问题是:INNODB_FT_INDEX_TABLE 中会存储哪些记录?


1. 全文索引的基本原理

  • 全文索引会对字段内容进行分词处理(Tokenization),并将每个词项(term)与文档 ID (doc_id) 关联起来。
  • 在你的例子中,name 字段的内容始终是 "male",因此全文索引只会生成一个词项 "male"
  • 每一行(文档)会被分配一个唯一的 doc_id,即使它们的内容完全相同。

2. INNODB_FT_INDEX_TABLE 的结构

INNODB_FT_INDEX_TABLE 是 InnoDB 存储引擎内部的一个表,用于存储全文索引的倒排索引信息。它通常包含以下字段:

字段名含义
word词项(term),即分词后的单词或短语。
first_doc_id该词项出现的第一个文档 ID。
last_doc_id该词项出现的最后一个文档 ID。
doc_count包含该词项的文档总数。
doc_id具体包含该词项的文档 ID(每行一条记录)。

3. 示例数据

假设你的表名为 example_table,结构如下:

CREATE TABLE example_table (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    FULLTEXT(name)
);

插入 10 条记录:

INSERT INTO example_table (id, name) VALUES
(1, 'male'),
(2, 'male'),
(3, 'male'),
(4, 'male'),
(5, 'male'),
(6, 'male'),
(7, 'male'),
(8, 'male'),
(9, 'male'),
(10, 'male');

执行以下步骤查看 INNODB_FT_INDEX_TABLE 中的信息:

(1) 设置 innodb_ft_aux_table
SET GLOBAL innodb_ft_aux_table = 'test/example_table';
(2) 查询倒排索引信息
SELECT word, first_doc_id, last_doc_id
FROM information_schema.INNODB_FT_INDEX_TABLE;

4. 查询结果分析

由于所有记录的 name 字段值都是 "male"INNODB_FT_INDEX_TABLE 中会存储以下记录:

wordfirst_doc_idlast_doc_id
male110

解释:

  • word:分词后得到的唯一词项是 "male"
  • first_doc_id"male" 出现在第一个文档(doc_id = 1)。
  • last_doc_id"male" 出现在最后一个文档(doc_id = 10)。

5. 更详细的倒排索引信息

如果你想查看更详细的倒排索引信息(例如每个文档的具体 doc_id),可以查询 INNODB_FT_INDEX_TABLE 的完整内容:

SELECT * FROM information_schema.INNODB_FT_INDEX_TABLE;

可能的输出如下:

wordfirst_doc_idlast_doc_iddoc_countdoc_id
male110101
male110102
male110103
male110104
male110105
male110106
male110107
male110108
male110109
male1101010

解释:

  • 每一行代表一个文档 ID (doc_id) 和对应的词项 "male"
  • first_doc_idlast_doc_id 是词项 "male" 覆盖的文档范围,分别为 110
  • doc_count 表示包含该词项的文档总数,在这里是 10

6. 总结

  • 即使所有记录的 name 字段值相同(如 "male"),每条记录仍然会有唯一的 doc_id
  • INNODB_FT_INDEX_TABLE 中,first_doc_idlast_doc_id 会反映该词项覆盖的文档范围。
  • 如果表中有 10 条记录,且 name 字段值都为 "male",那么:
    • first_doc_id 将是 1
    • last_doc_id 将是 10
    • doc_count 将是 10

希望这个解释能够帮助你理解 INNODB_FT_INDEX_TABLE 的工作原理!如果还有其他疑问,请随时告诉我!

相关文章:

  • 软考(软件设计师)之操作系统
  • GRBL运动控制算法(四)加减速运算
  • JAVA接口和继承
  • AI-人工智能-多模态药物识别AI新算法GSFM,为精准药物表征装上“智慧眼”
  • 深入探索 `malloc`:内存分配失败的原因及正确使用规范
  • C语言:32位数据转换为floaf解析
  • RHCSA Linux 系统 文件的查看、复制、移动、重命名、编辑文件
  • GPT-5、o3和o4-mini即将到来
  • PCI认证 密钥注入 ECC算法工具 NID_secp521r1 国密算法 openssl 全套证书生成,从证书提取公私钥数组 x,y等
  • WinForm真入门(11)——ComboBox控件详解
  • 996引擎-源码学习:Cocos2d-Lua 的 class(classname, ...)
  • 2025 年河北交安安全员考试:巧用行业报告丰富知识储备​
  • 信息安全测评中心-国产化!
  • vi/vim常用快捷键
  • 【KWDB 创作者计划】架构设计与AIoT场景实践
  • micro介绍
  • 算法中Hash备胎——LRU的设计与实现
  • Spring Boot 配置文件加载优先级全解析
  • java方法04:命令行传递参数
  • Linux 内存映射机制:正向映射与反向映射深度解析