我有一个非常大的表(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
的基数数字似乎不同。
答案 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。