【问题标题】:difference of fulltext index on many columns vs one accumulated column许多列上的全文索引与一个累积列的差异
【发布时间】: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


【解决方案1】:

根据您给出的用例,您没有理由不这样做。但是,如果您的专栏内容很大,复制它很可惜,但我相信 MySQL 并没有真正让您选择。如果问题越来越严重,仍然需要切换到专门的全文搜索引擎,如 Lucene、ElasticSearch(基于 Lucene)或 SphinxSearch,并在需要时使用 ID 作为参考将它们连接到 MySQL。

【讨论】:

    猜你喜欢
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 2017-05-17
    • 1970-01-01
    • 2014-02-12
    • 2022-07-24
    相关资源
    最近更新 更多