我有两个包含大量数据的表。
ACTION_SUMMARY和ACTION_DETAIL
每个用户ACTION_SUMMARY在我的数据库中每天有一行,每个用户有零、一行或多ACTION_DETAIL行ACTION_SUMMARY。
我想要一个查询,它返回的用户至少有一个ACTYP_ID在某些值集中具有操作类型 () 的详细记录。
这是一个例子:
select
    AS.USER_ID
from
    ACTION_SUMMARY AS
    JOIN ACTION_DETAIL AD on AS.AS_ID = AD.AS_ID
where
    AS.DATE between '2015-01-01' and '2015-07-07'
    and AD.ACTYP_ID in (45, 25, 11)
AS.DATE上面有索引。但是,由于数据库中有超过 200 万用户,并且每个摘要平均有 5-10 条详细记录,因此我遇到了性能问题。
我正在考虑EXISTS以这种方式使用:
select
 AS.USER_ID
from
    ACTION_SUMMARY AS
where
    AS.DATE between '2015-01-01' and '2015-07-07'
    and EXISTS (select 1 from ACTION_DETAIL AD where AD.AS_id = AS.AS_ID and AD.ACTYP_ID in (45, 25, 11))
现在,我有两个问题:
1)我的查询EXISTS速度更快吗 - 就像子查询一旦找到东西就会停止并继续前进?
2) 如何改进我的查询?
我在AS.DATE,AS.AS_ID和AD.AS_ID上有索引AD.ACTYP_ID 
谢谢