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,这取决于正确的索引。如果是表扫描,则需要一段时间,如果是索引检查,则可能甚至不需要读取行。