gpt4 book ai didi

mysql - 如何提高子查询的性能?

转载 作者:行者123 更新时间:2023-11-29 14:45:37 25 4
gpt4 key购买 nike

我在 MYSQL 中使用 IN 查询时遇到性能问题。

基本上我正在构建一个 friend 图,当用户 ~< 5 个 friend 时,爬行速度会变慢

然而,对于拥有大量好友(7000+)的用户 - 它运行速度 super 快。

这是我的模拟查询:

SELECT *
FROM activity
WHERE user_id IN
(
SELECT friend_id
FROM friends
WHERE user_id = 1 and approved = 1
)
order by activity.created_at DESC
LIMIT 25

出于某种原因,如果 user_id 有 < 5 个 friend ,则查询需要 15 秒才能返回 0 个条目。

在 friend 表上,我有一个关于 user_id 的索引并已批准。在事件条目上,我在created_at上有一个索引。

有什么建议或重构吗?

最佳答案

基本上,示例中的子查询将针对从 activity 表中选择的每一行执行,您可以通过将 activity 表上的过滤器移至外部范围来减少它,因此尝试使您的顶级查询在过滤方面更加具体。

尝试INNER JOIN,它工作得更快吗?

SELECT * FROM activity a
INNER JOIN friends f ON a.user_id = f.friend_id
WHERE a.user_id = 1 AND f.approved = 1
order by activity.created_at DESC LIMIT 25

几个问题:

  • 两个表都有 user_id 列?
  • friend 表中的列已批准吗?

关于mysql - 如何提高子查询的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7012762/

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