【问题标题】:MYSQL FULLTEXT Index PerformancesMYSQL FULLTEXT 索引性能
【发布时间】:2021-02-03 16:32:45
【问题描述】:

我有多个字段的 Mysql 表,我正在使用 api 在这些标签中搜索一个或多个单词:

myTable(id, label1, label2, label3, label4, label5)

所以我在 所有字段(label1、label2、label3、label4、label5)上创建了 1 个 FULLTEXT 索引 使用请求:

CREATE FULLTEXT INDEX search_index_mytable ON myTable(label1, label2, label3, label4, label5);

使用示例:我要查找单词:word1、word2、word3

-- example 1
SELECT id 
FROM myTable 
WHERE MATCH(label1, label2, label3, label4, label5 )
      AGAINST ('word1* word2* word3*' IN BOOLEAN MODE)

-- example 2
SELECT id 
FROM myTable 
WHERE MATCH(label1, label2, label3, label4, label5 ) AGAINST ('word1*' IN BOOLEAN MODE)
   OR MATCH(label1, label2, label3, label4, label5 ) AGAINST ('word2*' IN BOOLEAN MODE)
   OR MATCH(label1, label2, label3, label4, label5 ) AGAINST ('word3*' IN BOOLEAN MODE)

我的问题是:哪个请求示例最快?他们是平等的吗?

非常感谢

【问题讨论】:

    标签: mysql sql database indexing full-text-search


    【解决方案1】:

    示例 1 更快;这是 FULLTEXT 之美的一部分。

    您可能不需要单词末尾的*。无论如何,“词干”已经完成。

    您可能需要在每个单词前加上+。这取决于您是否需要“或”或“与”逻辑。

    注意“短”词和“停用词”。

    请注意,您构建的索引将始终针对所有 5 列进行测试;如果您只需要测试一列,则需要另一个 FT 索引。

    【讨论】:

    • 非常感谢您回答我的问题
    • 关于“词干”(*)如果我不使用 * 我没有得到相同的结果计数(6200 而不是 49677)。简短的单词,你能给我最少的字符吗?谢谢
    • @AmenzO - 在每种方法中,有哪些较长的单词示例?
    • 用户可以使用 >= 3 个字符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2018-08-13
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多