MyISAM上的全文索引,单列与多列索引

时间:2016-02-08 10:36:21

标签: mysql full-text-search multiple-columns myisam full-text-indexing

我有一个非常大的表(4M +行),磁盘空间超过40Gb(14Gb数据和28Gb索引)。我需要对多个字段进行全文搜索,无论是组合还是分离,这意味着我需要在单列和多列上进行全文搜索,如下所示:

用于组合搜索

SELECT `column_a`, `column_b` FROM `table_1` WHERE MATCH (`column_a`, `column_c`, `column_x`) AGAINST ('+$search_quesry*' IN BOOLEAN MODE);

进行单独搜索

SELECT `column_a`, `column_b` FROM `table_1` WHERE MATCH (`column_a`) AGAINST ('+search_query*' IN BOOLEAN MODE);
SELECT `column_a`, `column_b` FROM `table_1` WHERE MATCH (`column_c`) AGAINST ('+search_query*' IN BOOLEAN MODE);
SELECT `column_a`, `column_b` FROM `table_1` WHERE MATCH (`column_x`) AGAINST ('+search_query*' IN BOOLEAN MODE);

这是我的问题。我已经将以下两个集合定义为索引,这会导致24Gb +磁盘空间。我做对了还是一套就够了?

ALTER TABLE  `table_1` ADD FULLTEXT (`column_a`, `column_c`, `column_x`);

和/或

ALTER TABLE  `table_1` ADD FULLTEXT (`column_a`);
ALTER TABLE  `table_1` ADD FULLTEXT (`column_c`);
ALTER TABLE  `table_1` ADD FULLTEXT (`column_x`);

OR

ALTER TABLE  `table_1` ADD FULLTEXT (`column_a`);
ALTER TABLE  `table_1` ADD FULLTEXT (`column_c`, `column_x`);

这主要是为了减少所需的磁盘空间以及更好的性能。任何更好的建议都非常受欢迎。谢谢:))

P.S。当索引合并和分离时,column_a的基数数字似乎不同。

1 个答案:

答案 0 :(得分:1)

对于MyISAM:

FULLTEXT (`column_a`, `column_c`, `column_x`)

对于InnoDB:

FULLTEXT (`column_a`, `column_c`, `column_x`),
FULLTEXT (`column_a`),
FULLTEXT (`column_c`),
FULLTEXT (`column_x`)

如果您使用的是5.6或更高版本,则应转换为InnoDB。