许多列与一个累积列的全文索引的差异

时间:2014-06-12 11:41:18

标签: mysql sql indexing full-text-indexing

我只是偶然发现了将全文索引添加到多列的最大列限制:

ALTER TABLE some_table ADD FULLTEXT (col1, col2, col3, col4, col5, col6, ...);

这可能导致以下错误:

1070 Too many key parts specified; max 32 parts allowed

这意味着索引最多只能跨越32列。要解决这个问题,我可以简单地创建一个新列并合并这些列内容:

ALTER TABLE some_table ADD merged_fulltext text NOT NULL;
INSERT INTO some_table(merged_fulltext) SELECT CONCAT_WS(col1, col2, col3, col4, col5, col6, ...);
ALTER TABLE some_table ADD FULLTEXT merged_fulltex;

现在,在包含合并内容的一列上有一个全文索引。

当然,现在我有重复的数据,如果任何合并列的内容发生更改,则必须更新some_table列,但是对于全文索引:

使用合并的全文索引而不是跨越多列的跨越一列是否有任何区别?我可以使用它作为解决方法来克服太多的关键部件限制吗?

我只想在所有列上使用全文搜索MATCH(merged_fulltext) AGAINST(...),因此不需要对几列进行排序或搜索。

1 个答案:

答案 0 :(得分:0)

在您提供的用例上,没有理由不这样做。但是,如果您的列内容很大,那么将它复制是很遗憾的,但我相信MySQL并不会让您真正选择。如果它成长为一个问题,它仍然是时候切换到专门的全文搜索引擎,如Lucene,ElasticSearch(基于Lucene)或SphinxSearch,并在需要时使用ID作为参考将它们连接到MySQL。