gpt4 book ai didi

mysql - MySQL 查询的扩展(直连接与内连接)

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

当我在数据库中进行查询时 - 如果用户有 10k 个 friend ,我会遇到扩展问题 - 我对有 2k 个 friend 的用户使用的相同查询无法扩展,这意味着需要很长时间才能扩展流程。

典型的情况是,当用户的 friend 数量达到一定阈值时,我最终不得不使用 STRAIGHT_JOIN 来拉取查询,但是我需要编写条件语句来首先查看有多少 friend ,然后从那里开始。数据越多,查询获取的速度就越慢。

是否有更好的方法来通过 MySQL 扩展查询,以便无论生成多少数据或者我是否生活在幻想世界中,它们都以相同的速率运行?

编辑:下面列出的查询:

SELECT photos.photo_id, count(distinct photo_views.ip_address) as total_count
FROM photos
INNER JOIN friends on friends.friend_id = photos.user_id
INNER JOIN photo_views on photos.photo_id = photo_views.photo_id
WHERE friends.user_id = 1 and friends.approved = 1
and photos.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP by photos.photo_id
ORDER by total_count desc

照片索引为:

[user_id, created_at, photo_id], [user_id], [photo_id] - PRIMARY

好友索引为:

[user_id, approved], [friend_id], [user_id, friend_id] - PRIMARY

photo_views 的索引为:

[photo_id] - PRIMARY

最佳答案

我会先从你的 friend 开始作为你的限定符,这样它就不会尝试将照片视为覆盖所有人的基础...由于你正在进行(内部)连接,所以我会选择 Straight_join如:

SELECT STRAIGHT_JOIN
P.Photo_ID, COUNT( distinct PV.IP_Address ) as Total_Count
FROM
Friends F
JOIN Photos P
ON F.Friend_ID = P.User_ID
AND P.Created_At >= date_Sub( now(), Interval 30 day )
JOIN Photo_Views PV
ON P.Photo_ID = PV.Photo_ID
WHERE
F.User_ID = 1
AND F.Approved = 1
GROUP BY
P.Photo_ID
ORDER BY
total_Count DESC

这样,您就只能从那些获得批准的用户的 friend 开始。由此,加入 friend 的照片并且日期符合条件...由此,获取每个 View 表的点击次数

关于mysql - MySQL 查询的扩展(直连接与内连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9824711/

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