我有一些表格的查询:
select * from MAIN.MY_TABLE
where ID in (select ID from OTHER.OTHER_TABLE where type = 'BANANA');
在哪里ID
被索引MAIN.MYTABLE
,但没有被索引OTHER.OTHER_TABLE
最近这些一直在与ORA-01555: snapshot too old
.
我的理解是这是由于查询对于撤消空间花费的时间太长。
这很可能是因为它是业务旺季并且数据库负载很重。
问题是,如果我要将查询拆分为表单的几个查询:
select * from MAIN.MY_TABLE
where ID in (select ID from OTHER.OTHER_TABLE where type = 'BANANA')
and ID >= 0 and ID <1000;
select * from MAIN.MY_TABLE
where ID in (select ID from OTHER.OTHER_TABLE where type = 'BANANA')
and ID >= 1000 and ID <2000;
select * from MAIN.MY_TABLE
where ID in (select ID from OTHER.OTHER_TABLE where type = 'BANANA')
and ID >= 2000 and ID <3000;
一方面,这似乎每个查询都比初始查询花费的时间更少。另一方面,这似乎是一个明显的优化,我认为甲骨文无论如何都会这样做。