SQL:如果找到匹配的记录,立即返回



我有一个用户和他们的帖子表。它看起来像"user_id | post_id | postrongtatus"

现在我有一个userid (ex, 100个用户)的列表,我想知道他们中有多少人至少有一个帖子被删除了(ex, postrongtatus 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的解决方案。

最新更新