我有一个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索引是一个非常钝的工具。
当然这里没有太多的内存(我认为这是一个虚拟机)会影响整体性能。