web-dev-qa-db-ja.com

Oracleの既存のインデックスに列を追加する

比較的大きなテーブル(81M行)とそのインデックスがあります。

既存のインデックスに列を追加したい。

グーグルで検索したのですが、道が見つかりませんでした。

どこか を読みましたが、インデックスに列を追加する唯一の方法は、列を削除して再作成することです。

ただし、 ここでは 既存のインデックスに列を追加するのが一般的な方法です。 (著者はそれをお勧めしませんが。)

それで、既存のインデックスに列を追加することは可能ですか?可能であればそれは良い習慣ですか?

15
bonsvr

インデックスを削除して再作成せずに、既存のインデックスに新しい列を追加することはできません。

ジョナサンルイスが「既存のインデックスに列を追加する」ことについて話しているとき、彼は既存のインデックスを削除して新しいインデックスを作成することについて話している。彼の例では、「元のインデックス」と「変更されたインデックス」の両方がCREATE INDEXステートメントでリストされていることに注意してください。この例には、古い列を削除せずに新しい列を追加するALTER INDEXステートメントはありません。

追加の列を使用してインデックスを削除して再作成することをお勧めするかどうかは、いくつかの要因によって異なります。 Jonathan Lewisが指摘しているように、列を追加するとインデックスのクラスタリング係数に影響を与え、既存のクエリのパフォーマンスが低下するさまざまな状況があります。あなたのシステムや私たちが話しているインデックスについて何も知らなければ、アドバイスすることは不可能です。

18
Justin Cave