MySQL和索引的基数

我有一个MySQL数据库中的MyISAM表在Ubuntu的10.04服务器与256MB的RAM。 最大数据包大小是32mb。 该表有150,000行。

该表有三列,其中两列是TEXTtypes。 我在这两个上创build了一个FULLTEXT索引。 一个索引的基数等于表中的行数,另一个只有三分之一。

这是为什么?

低基数指数是否意味着MATCH()AGAINST()会错过命中? (好像是这样。)如果是这样,我可以增加内存限制在哪里增加我的索引的基数?

如果您认为有问题,请使用实用程序myisam_ftdump检查索引。 基数取决于TEXT字段中有多less不同的单词。

您没有指定字段的内容,所以答案不是唯一的。

另外,如果你还没有创build一个/etc/mystopwords文件,MySQL会使用其内置的停用词表。 此列表取决于sorting规则,如果列的sorting规则与默认sorting规则不同,则可能会给出错误结果。

即使是查询types也可能会产生奇怪的结果。

总之,基数不是一个问题,直到你知道索引中的某些东西丢失了。

我可以增加内存限制在哪里增加我的索引的基数

嗯? 不可以。基数是数据中唯一值的数量除以表中值的总数 – 更改可用内存量不会更改您的数据。

正如AndrewQ所说,使用停用词对被索引的内容有更多的select性会对基数度量有很大的影响,从而优化查询,但是对于文本search来说,FULLTEXT索引是一个非常钝的工具。

当然这里没有太多的内存(我认为这是一个虚拟机)会影响整体性能。