Mysql 获取记录中有超过一个孩子的家庭的计数

Mysql 获取记录中有超过一个孩子的家庭的计数,mysql,sql,Mysql,Sql,这是我的问题,但需要很长时间才能完成 SELECT count(*) AS count_all FROM families WHERE family_status_cat_id = 1374 AND (SELECT COUNT(*) FROM childrens WHERE family_id = families.id) > 1 AND unit_id IN (49,33,74,327,329,453,454,469,472,546,547) 有没有更

这是我的问题,但需要很长时间才能完成

SELECT count(*) AS count_all 
FROM families 
WHERE family_status_cat_id = 1374 
      AND (SELECT COUNT(*) FROM childrens WHERE family_id = families.id) > 1 
      AND unit_id IN (49,33,74,327,329,453,454,469,472,546,547) 

有没有更好的方法?

如果使用正确的索引,您的查询可能会很好地工作。我建议以下两点:

create index families_fsc_unitid on families(family_status_cat_id, unit_id);
create index children_familyid on children(family_id);

HAVING
子句允许您筛选出不满足某些聚合条件的行

select
    count(*)
from families
inner join
    (
        SELECT 
            family_id 
        FROM childrens as c
        group by family_id 
        having COUNT(*) > 1 -- more than one child in the family
    ) as MultiChild
    on MultiChild.falily_id = families.id

当然,您还需要添加我省略的其他条件。

是的,“childrens”不是一个英语单词:)。您对
家庭
儿童
有什么索引?可能需要很多time@Michal你从没听说过双复数吗?“people”是一个实词,“people”的复数形式。它类似于双重过去时:find,found,founded.@www.sblog.in,这取决于正确的索引。如果是表扫描,则需要一段时间,如果是索引检查,则可能甚至不需要读取行。