如何解决SQL:如果找到一条匹配的记录,则立即返回
我有一张桌子,上面有用户和他们的帖子。看起来像“user_id | post_id | post_status”。
现在我有一个用户 ID 列表(例如 100 个用户),我想知道其中有多少人至少有一个帖子被删除(例如 post_status 3)。
这是我的示例搜索:
select count(distinct user_id)
from post_table
where user_id in ( {my set} )
and post_status=3
它运行速度非常慢,因为它遍历整个表。有没有办法加快查询速度?
解决方法
使用类似的东西
SELECT COUNT(*)
FROM
-- the list of userid as a rowset
( SELECT 123 AS user_id UNION ALL
SELECT 456 UNION ALL
-- ...
SELECT 789
) user_id_list
WHERE EXISTS ( SELECT NULL
FROM post_table
WHERE post_table.user_id = user_id_list.user_id
AND post_table.post_status = 3 )
如果您的 MySQL 版本是 8.0.4 或更高版本,那么您可以将用户列表提供为 CSV/JSON 并使用 JSON_TABLE 对其进行解析(查询文本会更紧凑)。
,INDEX(post_status,user_id)
可能有助于加快您的查询速度,尤其是在很少有 status=3 的行时。
这也可以加快 Akina 的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。