2012-01-03 2 views
1

私はデータ移行プロジェクトを行っています。ここでは、一部のテーブルは一度しか読み込まれません。 I. 1つのInsert Inを選択するだけで表が完全にロードされます。インデックスなしで検証制約/主キーを作成することはできますか?

プライマリキーと制約を使用してデータの整合性を保証したいと考えています。

Oracleでは、主キーまたは制約を作成すると、自動的に対応する索引が自動的に作成されます。

インデックスの作成を無効にすることはできますか?ただし、必要に応じて制約を検証する必要があることに注意してください.Oracleが実際に検証を行う必要がある場合は、インデックスを作成するか(必要に応じて)、またはフル・テーブル・スキャンを実行します。

このインデックス作成を無効にするか、延期する理由は、作成されるインデックスのほとんどが実際には使用されないことに気付いたことです。これは、すべてのインデックスのUsage Monitoringを有効にし、データ移行プロセスを実行してv $ object_usageを検証することで行います。

+2

私の2セント:制約の考え方はチェックされているということです。そして、あなたは本当にインデックスを使用したいという制約をチェックします。したがって、制約を作成しないでください(手動でチェックするか、dbトリガーを使用する)か、インデックスの作成を受け入れます。 –

+0

私の場合、実際にはチェックされていないと思います(少なくともインデックスを使用していません)。私は何が起こっているのだろうと推測しているのは、対応するテーブルから外部キーを直接ロードしているときに挿入オラクルが制約チェックをスキップしているということです(そのような場合、Oracleは制約チェックを実際に行う必要はありません一致レコードは実際に存在します)。 – vicsz

+0

幸いにも、Oracleはあなた(または他の誰か)がこのような間違いをすることを許可しません。 –

答えて

4

Oracleは一意キーを使用して一次キー制約を適用します。無効な状態で作成しないかぎり、対応する索引を作成しないで主キーを作成することはできません。

EDIT:

OracleはOracleはユニークかどうか、制約を施行し、そのインデックスを使用しますが、主キーで使用される列(複数可)に、既に使用できる索引がある場合。 Oracleが索引を作成する必要がある場合は、制約が遅延可能でない場合を除き、索引は一意ではありません。コメントのためにShannonとAdamに感謝します。

+0

説明:Oracleでは、主キーまたは一意制約を強制するために索引が必要です。ユニークなインデックスである必要はありません。また、既存の索引が存在する場合、Oracleは索引を作成しません。 –

+0

'USING INDEX [myschema.myindex]'句は、作成またはハイジャックするインデックスをOracleに指示します。 myschema.myindexが指定されている場合、Oracleはその索引を使用して索引を実行しようとします。そうでないと、contstraintの名前と列定義を持つ一意索引が作成されます。 –

+0

使用可能な索引がすでに列に存在しない場合は、Oracleが作成します。制約が遅延可能でない場合、ユニークなインデックスが作成されます。コメントありがとう。 – DCookie

0

EDITこの回答の質問に答えるビットは間違っています。

免責事項:私は、これはそれが実際に主キーを作成せずにprimary key constraintの行動を再現することが可能です

賢明であるとは考えていません。これは、の制約、非インデックスのPK制約の一部が実質的にnot null constraintunique constraintの組み合わせであり、であるためです。あなたはインデックスを持っていません。あ、はい。それが可能だ。

しかし:PKは使ったことがないは考えにくいですテーブルの

  1. アイデア。
  2. 誰かがPKに夢中になると決めたときに発生した問題を解決しなければならないのは、10年ほど前のことです。

通常のルートを下り、主キーを作成することを強くお勧めします。宇宙は安く、後でそれを後悔するでしょう。

+0

一意の制約は、既存の索引を使用できる場合を除き、索引にもなります。 –

+0

Ach @ShannonSeverance、そうです。私はそれを知らなかった。同じような愚かな間違いをしている人にとって、ここには便利な[AskTomのリンク](http://asktom.oracle.com/pls/asktom/f?p=100:11:8188769874548604: ::: P11_QUESTION_ID:36858373078604)。 – Ben

+0

ええ、私はかなり参照整合性に設定されています...と私は確かに制約を削除しません..しかし、分析を通じて、多くのインデックスが実際に制約チェックに使用されていないことがわかります。私の場合、インデックスを削除すると、パフォーマンスが大幅に向上します。 – vicsz

関連する問題