【发布时间】:2014-06-12 11:41:18
【问题描述】:
我刚刚偶然发现全文索引在将其添加到许多列时的最大列限制:
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(...),因此不会仅对几列进行排序或搜索。
【问题讨论】:
-
附带说明,您可以使用
concat_ws()在列之间添加空格。
标签: mysql sql indexing full-text-indexing