我得到了一个查询,我试图从另一个表中获取最大(日期)值作为连接条件。
SELECT a.col1, a.col2
FROM tablea a,
tableb b
WHERE a.pk_id = b.fk_id
AND a.effdt = (SELECT MAX(effdt)
FROM tablea c
where c.id= a.id
and c.effdt <= sysdate
)
字符串
这里已经为effdt列创建了一个索引,但查询仍然需要很长时间才能返回值。任何帮助加入他们更好的将是伟大的。
3条答案
按热度按时间w41d8nur1#
使用
RANK()
解析函数消除相关的子查询:字符串
slwdgvem2#
表c上的子查询,
effdt
上的索引是不够的。(id, effdt)
上的索引会做得更好。关键是在一个索引中覆盖where
子句和max(effdt)
函数。这与索引order by
非常相似:http://use-the-index-luke.com/de/sql/sortieren-gruppieren/indexed-order-byghg1uchk3#
除了像Markus建议的那样添加
index
之外,还可以试试这个。IMO连接比子查询更好(对于我尝试的场景)字符串