次の形式のクエリがいくつかあります。
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;
一方では、これは各クエリが最初のクエリよりも時間がかからないように見えます。一方、それは非常に明白な最適化のように思われるので、Oracle はとにかくこれを行うと思います。