是否可以在MySQL中看到FULLTEXT INDEX
的实际内容?甚至直接查询索引(如SELECT words FROM table.fulltext_index
,它会返回所有索引单词,只是为了举个例子(?
对于标量字段上的常规 b 树索引,这不是必需的,因为它们只是相同的值,只是为了加快查找速度(基本上(。但是在全文索引中,发生了如此多的"语言魔力",以至于在对表进行INSERT
时很难知道索引中的实际内容。
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
最后一个排序首先获取最频繁的排序;删除以按字母顺序获取它们。