select m.ID,m.cell_number,cm.id
from corporate_main_member m
, corporate_main_corporate_membership cm
WHERE m.status = 'active'
AND m.ID IN (
select cm.FK_Member_ID
from corporate_main_corporate_membership cm
WHERE cm.status = 'active'
AND cm.ID IN (
select gm.FK_Corporate_Membership_ID
from corporate_main_group_membership gm
WHERE gm.status = 'active'
AND gm.FK_Group_id IN (168,169,170)
Group BY gm.FK_Corporate_Membership_ID
)
)
AND cm.fk_corporation_id = 5
AND cm.FK_Member_ID = m.id
在:
1 Million records of corporate_main_member
2 Million records of corporate_main_corporate_membership
3 Million records of corporate_main_group_membership
以上查询暂停mysql!直到前天我才使用脚本向corporate_main_member和corporate_main_corporate_membership表添加了几千条记录。不确定它是否相关或者数据库大小超过某个阈值会导致严重的性能问题。
有任何帮助吗?我不知道索引或任何东西。架构很明显。
答案 0 :(得分:2)
尝试这个,
SELECT m.ID,
m.cell_number,
cm.id
FROM corporate_main_member m
INNER JOIN corporate_main_corporate_membership cm
ON cm.FK_Member_ID = m.id AND
cm.fk_corporation_id = 5
INNER JOIN
(
SELECT ccm.FK_Member_ID
FROM corporate_main_corporate_membership ccm
INNER JOIN corporate_main_group_membership gm
ON ccm.ID = gm.FK_Corporate_Membership_ID
WHERE ccm.STATUS = 'active' AND
gm.STATUS = 'active' AND
gm.FK_Group_id IN ( 168, 169, 170 )
GROUP BY ccm.FK_Member_ID
) s ON m.ID = s.FK_Member_ID
WHERE m.STATUS = 'active'