私は 1 億 4000 万行以上を含む非常に大きなテーブルをオラクルに持っています。現在、このテーブルで毎晩 3 回のフル テーブル スキャンを実行しており、結果の一部を使用して tmp テーブルにデータを入力しています。その tmp テーブルは、非常に大きなレポート (通常は 140K + 行) に変換されます。
大きなテーブルは tasklog と呼ばれ、次の構造があります。
何百万もの異なるドキュメント ID があり、それぞれが 1 回から数百回繰り返されます。date_time_in は、このエントリがデータベースに追加された時刻です。
すべてのフル テーブル スキャンは次のようになります。
DECLARE
n_prevdocid number;
cursor tasks is
select *
from tasklog
order by document_id, date_time_in DESC;
BEGIN
for tk in tasks
loop
if n_prevdocid <> tk.document_id then
-- *code snipped*
end if;
n_prevdocid = tk.document_id;
end loop;
END;
/
だから私の質問: 最新の date_time_in を持つ行で document_ids の個別のリストを取得する簡単な (ish) 方法はありますか? これにより、全体が劇的に高速化される可能性があります。または、このデータを毎日取得するためのより良い方法を考えられる人はいますか?
関連する可能性があること、このテーブルには現在の日時で挿入された行しかありません。範囲分割されていませんが、それがどのように役立つかわかりません。行が更新または削除されることはありません。毎日約 70k ~ 80k 行が挿入されます。