gpt4 book ai didi

MySQL Innodb 全文邻近搜索性能糟糕

转载 作者:行者123 更新时间:2023-11-29 08:25:04 26 4
gpt4 key购买 nike

我有一个 mysql 数据库,其中有一个名为 item 的简单表。项目包含以下字段并有 55,000 条记录:

ID(PK)描述(INNODB 全文)日期

根据设计,我被迫索引一直到 1 个字符的单词,因为某些描述包含诸如 Item 1 a 2 42 之类的名称,其中空格必须保持完整。我正在对该表运行全文搜索,以下是以下代码的结果:

Select ID, Description, Date
From Item
WHERE date > DATE_SUB(NOW(), INTERVAL 15 MONTH)
AND description LIKE CONCAT('%item 1 2 a 4%')
AND MATCH (description) AGAINST ('+item +1 +2 +a +4' in boolean mode);

此查询将在 1.2 秒内返回。但是,一旦我将以下邻近搜索添加到查询中,我的返回时间就会飞速增长:

Select ID, Description, Date
From Item
WHERE date > DATE_SUB(NOW(), INTERVAL 15 MONTH)
AND description LIKE ('%item%')
AND MATCH (description) AGAINST ('+item +1 +2 +a +4' in boolean mode)
AND MATCH (description) AGAINST ('"1 2 a 4" @30' in boolean mode);

此查询将在 54 秒内返回! 邻近搜索对于我的查询来说是必须的,因为我需要确保找到“item 1 2 a”而不是“item 1 2 48884848 222 a”这会完全不同。当单词超过 1 个字符时,邻近搜索运行得更好,但在某些情况下需要用户输入 1 个字符的单词。还有什么我可以做的,可以替代全文 innodb 的邻近搜索,但具有更好的性能?如果 MYSQL 中没有其他东西,我愿意使用一些东西来集成,以便为我提供更好的邻近搜索(尽管我在 Windows 上)。

谢谢!

最佳答案

LIKE 条件会破坏您的全文索引。替换条件

description LIKE CONCAT('%item 1 2 a 4%') -- and why CONCAT() anyways?

...与

MATCH (description) AGAINST ('"item 1 2 a 4"' IN BOOLEAN MODE)

您的第二个条件毫无用处,因为它与第一个条件重叠(您已经通过确切的字符串“item 1 2 a 4”进行过滤,这些行始终匹配“+item +1 +2 +a +4”)。

关于MySQL Innodb 全文邻近搜索性能糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18199554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com