我只是偶然发现了将全文索引添加到多列的最大列限制:
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(...)
,因此不需要对几列进行排序或搜索。
答案 0 :(得分:0)
在您提供的用例上,没有理由不这样做。但是,如果您的列内容很大,那么将它复制是很遗憾的,但我相信MySQL并不会让您真正选择。如果它成长为一个问题,它仍然是时候切换到专门的全文搜索引擎,如Lucene,ElasticSearch(基于Lucene)或SphinxSearch,并在需要时使用ID作为参考将它们连接到MySQL。