如何在MySQL中查看全文索引的索引内容?

时间:2018-06-20 11:28:51

标签: mysql indexing full-text-search full-text-indexing

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

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

1 个答案:

答案 0 :(得分:1)

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

InnoDB使用单词+行号(可能是PRIMARY KEY)+列(如果您同时索引多个列)+列的字节偏移量来构建反向索引。我怀疑最后一项存储为逗号(或类似格式)。也就是说,我设想索引是这样的:

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

最后一种排序使他们获得最频繁的优先;删除以按字母顺序排列。