gpt4 book ai didi

mysql - 将子查询结果设置为数组,运行时间过长

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:48 24 4
gpt4 key购买 nike

我正在处理一个运行速度非常慢的查询,并试图弄清楚如何将子查询加载到数组或其他东西中以使其更快。

SELECT COUNT(bdgid)
FROM member_badges
WHERE usid in(
SELECT usid
FROM member_badges
WHERE bdgid in (1,4,5,6,7,8)
GROUP BY usid
HAVING COUNT(usid) =6)
GROUP BY bdgid

子查询返回一组特定的 usid 列表,主查询计算包含其中一个用户 id 的 bdgid。但是这个例子运行的时间太长了。

mbrbdid    usid      bdgid
------------------------------
1 14 1
2 11 4
3 25 4
4 11 7
5 11 8
6 22 1

该表有超过 30,0000 条记录。基本上一个 usid 可以每次获得 1-10 的任何徽章一次。该表是用户每次获得徽章的实例。所以我试图获取所有拥有徽章(1、4、5、6、7、8)的 usid,然后对每个徽章 1-10 进行计数,但只使用那些特定的 id

最佳答案

您的子查询正在为外部查询中的每一行运行,您可以通过将子查询结果作为子选择使用连接来重写您的查询,这样子选择将被评估一次,结果将与您的外部查询连接,usid 和 bdgid 的索引也会有帮助

SELECT COUNT(bdgid)
FROM member_badges a
join (
SELECT usid
FROM member_badges
WHERE bdgid in (1,4,5,6,7,8)
GROUP BY usid
HAVING COUNT(usid) =6) b
on(a.usid = b.usid)
GROUP BY bdgid

关于mysql - 将子查询结果设置为数组,运行时间过长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129510/

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