gpt4 book ai didi

MySQL 全文搜索运行速度极慢

转载 作者:行者123 更新时间:2023-11-29 19:37:22 26 4
gpt4 key购买 nike

处理少于​​ 50 行的小型数据集时,下面的查询绝对可以正常工作。当扩展此查询并在大约 5000 行的数据集上运行相同的查询时,该查询需要大约 3-6 秒的时间来运行,这在实时环境中太慢了。

可以采取哪些措施来提高此查询的性能?

SELECT table1.ID, table1.CompanyName, 
(SELECT CompanyIDBeingFollowed FROM table2 WHERE PersonID = ? )
FROM table1
JOIN table3 ON table1.ID = table3.ID
WHERE table1.Status = 'Live' AND ( MATCH(table3.Content) AGAINST( '+search +term' IN BOOLEAN MODE ) )
GROUP BY table1.CompanyID
LIMIT 10;

本质上,上面的查询是在大型数据集中进行搜索,使用 MySQL FullText 对结果进行排名,以便返回最相关的结果,即具有最高 MySQL FullText 分数的结果。然后根据匹配的内容从其他两个表中获取一些信息,这些信息用于在页面上填充对用户有用的内容。

想法?

我意识到当前大约 5000 行的数据集将在短时间内增长到数十万行,因此我宁愿现在就考虑如何最好地优化此查询,而不是稍后。

在开发环境中,查询会立即运行,因为这是在大约 50 行的数据集上。

更新

我刚刚更新了上面的 SQL,使其更容易阅读和理解。下表总结供引用。

Table 1 - Companies
- ID
- CompanyName

Table 2 - People Following Companies
- CompanyIDBeingFollowed
- PersonID

Table 3 - Pages On Company Website
- ID (Unique)
- CompanyID (Non-Unique)
- Content

最佳答案

很难回答你的问题,但如果我处在你的位置,我会尝试这样做:

  1. 使用解释来检查那里发生了什么
  2. 确保我确实需要group by
  3. 确保我确实需要 `(SELECT ID FROM table2 WHERE ID = ?) 作为子查询
  4. 确保我确实需要order by

而且,当用户按一个词过滤数据时,使用“类似”搜索而不是全文搜索可能是可以接受的。

关于MySQL 全文搜索运行速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41505703/

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