gpt4 book ai didi

mysql - 优化凌乱的查询

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

所以我有这个邪恶的查询,需要清理它,因为执行需要大约 2 分钟。我无法更改任何表结构,但我可以将其拆分为循环中的子查询等。我使用的是 C++ 和 MySQL。

基本上,标签被选择,并且与该标签有联合的任何用户都必须由查询选择。

这里是查询,其中 123 是长度 >= 1 的 CSV 标签 ID 列表,josh@test.com 是要忽略的电子邮件的 CSV 电子邮件列表,长度 >= 0。我知道这是在问很多,但任何建议将不胜感激。

SELECT user_id,user_primaryemail,USER_EMAIL_IS_VALID
FROM users
WHERE ( ( user_id IN ( SELECT union_target_id
FROM systemtag_union
WHERE union_systemtag_id IN ( '123' )
&& union_type = 'User'
GROUP BY union_target_id
HAVING COUNT(DISTINCT union_systemtag_id) = 0) ) )
&& user_primaryemail NOT IN ( 'josh@test.com' )
&& USER_EMAIL_IS_VALID != 'No'
GROUP BY user_primaryemail

粗略的表结构:

users
-----
user_id
user_primaryemail
user_email_is_valid

systemtags
-----
systemtag_id

systemtag_union
-----
union_systemtag_id (corresponds to systemtags.systemtag_id)
union_target_id (corresponds, in this case, to users.user_id)
union_type (the type of the union, irrelevant in this case)

编辑:这是 EXPLAIN 的结果,作为 CSV:

"id","select_type","table","type","possible_keys","key","key_len","ref","rows","Extra"
1,"PRIMARY","users","ALL","user_email","","","",9104,"Using where; Using temporary; Using filesort"
2,"DEPENDENT SUBQUERY","systemtag_union","index","union_systemtag_id,union_type","union_target_id","4","",8,"Using where"

最佳答案

与实际答案相反,而是更多详细的问题澄清...您的内部查询似乎是在查询(此处释义)

SystemTag_Union 表中具有一个或多个列出的标签的任何用户 ID,但不同标签的计数 = 0。

这听起来像是一种矛盾的说法...给我一些具有这些标签之一的东西,但标签数 = 0...就是它...为了获得资格,必须满足一个WHERE 子句。

您能否澄清此查询的最终意图是什么?您是否正在尝试寻找那些可能(或没有)与您将采取行动的某些标签相关联的用户?

我实际上会将查询更改为使用不同的例如

SELECT DISTINCT 
U.user_id,
U.user_primaryemail,
U.USER_EMAIL_IS_VALID
FROM
users U
JOIN systemtag_union STU
ON U.User_ID = STU.union_target_id
AND STU.Union_Type = 'User'
AND STU.union_systemtag_id IN ( '123' )
WHERE
U.USER_EMAIL_IS_VALID != 'No'
AND U.user_primaryemail NOT IN ( 'josh@test.com' )

关于mysql - 优化凌乱的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6737237/

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