本番データベースで大規模な挿入/削除を行う場合、安全対策として、常にインデックスを再構築します。インデックスを再構築する必要があるかどうか (つまり、最新かどうか) を知る方法が Oracle から提供されているかどうか知りたいです。
1 に答える
インデックスは、通常の挿入と削除の後、常に「最新」です。
インデックスを使用できなくするさまざまな操作があります。たとえば、テーブルの移動、一部の種類のインポート、意図的にインデックスを使用不可にするなどです。使用できないインデックスは、次のようなステートメントで見つけることができます。実際のステートメントは、インデックスに対して何を行う必要があるかによって、おそらくもっと複雑になる必要があります。
select owner, index_name, status
from
(
select owner, index_name, status from dba_indexes union all
select index_owner, index_name, status from dba_ind_partitions union all
select index_owner, index_name, status from dba_ind_subpartitions
)
where status not in ('VALID', 'N/A', 'USABLE');
ただし、無効になっているすべてのインデックスを自動的に有効にすることは、必ずしも良い考えではありません。
プロセスは、インデックスを一時的に無効にして再度有効にすることができます。あなたはその真ん中に行きたくありません。または、1 つのパーティションに使用できないインデックスが意図的に含まれている可能性があります。これにより、アーカイブされたパーティションに多数のインデックスを含めることができますが、現在のパーティションの DML は高速に維持されます。または、制約に違反するデータを一時的に許可するために一意の制約が無効になっている可能性があります。
この問題に対する適切な一般的な解決策がない場合があります。複雑な環境では、各プロセスはそれ自体をクリーンアップする必要があります。開発者は、これらの概念を理解し、各変更を評価する必要があります。
あなたの質問が本当にインデックスのパフォーマンスに関するものであれば、これと重複している可能性があります。要約すると、おそらくインデックスをそのままにしておく必要があります。
頻繁な再構築が必要な奇妙なケースに遭遇したと思われる場合は、おそらくセグメント アドバイザが役立つ可能性があります。