首页 > 解决方案 > 如何在 MySQL 中查看全文索引的索引内容?

问题描述

FULLTEXT INDEX是否可以在 MySQL中看到 a 的实际内容?或者甚至直接查询索引(就像SELECT words FROM table.fulltext_index它会返回所有索引的单词,只是举个例子)?

对于标量字段上的常规 b 树索引,这不是必需的,因为它们只是相同的值,只是为了加快查找速度(基本上)。INSERT但是在全文索引中发生了如此多的“语言魔法”,以至于在对表格进行操作时很难知道索引中实际出现的内容。

标签: mysqlindexingfull-text-searchfull-text-indexing

解决方案


MyISAM 有办法,但您可能没有使用该版本。它包括一种获取单词的方法。

PRIMARY KEYInnoDB 使用单词 + 行号(可能)+ 列(如果您将多个列一起索引)+ 列中的字节偏移来构建倒排索引。我怀疑最后一项存储为 commalist (或类似的)。也就是说,我设想索引是这样的:

CREATE TABLE ft_index_for_table_x (
    word VARCHAR ...,
    pk ...,  -- possibly multiple columns
    col ...,  -- which column the word occurs in
    offsets ...,  -- list of byte offsets
    PRIMARY KEY(word, pk, col)
) ENGINE=InnoDB   -- but not really.

另外,请注意有一堆临时文件;这些似乎在最终整合到上述结构之前收集了索引信息。

我还没有听说过检查索引的工具。

这得到了一些东西,但我认为这不是单词列表:

strings FTS*.ibd  |
    awk '/^[a-z]+$/'  |
    sort  |
    uniq -c  |
    sort -nr

最后一种是最常见的。删除以按字母顺序获取它们。


推荐阅读