0

ENC_IDをPKとして使用するテーブルがあります。このフィールドは、他の多くのテーブル(これらの他のテーブルの1つで作成されます)へのFK(別のテーブルがその作成を制御します)でもあります。

2つのインデックスがあります。

  1. IX_00-DEPT_ID、ARRIVAL_TIME、ENC_ID-サービスSELECTクエリ。WHERE句のDEPT_ID、ARRIVAL_TIME; JOIN句のENC_ID
  2. IX_01-DEPARTURE_TIME、ENC_ID-サービスDELETE、INSERT、およびUPDATEクエリ。WHERE句のDEPARTURE_TIME; JOIN句のENC_ID

質問:

  1. ENC_IDをPKとして定義すると、インデックスが自動的に作成されますか?
  2. どちらかのインデックスにENC_IDフィールドを含めることに価値はありますか?それとも、3番目のインデックスの唯一の列にする必要がありますか?
4

2 に答える 2

0

ENC_ID を PK として定義すると、自動的にインデックスが作成されますか?

はい。PK は常に一意のインデックスによってサポートされます (列に対して PK 制約を宣言するだけの場合)

いずれかのインデックスに ENC_ID フィールドを持つ価値はありますか

たとえば、インデックスに SQL ステートメントで使用されるすべての列が含まれている場合、クエリによって異なります。その場合、Oracle はその状況でインデックス スキャンを使用できるため、これには利点があります。SQL ステートメントがインデックスで定義されているよりも多くの列を使用する場合、PK 列を追加しても利点がない可能性があります。

インデックスが使用されるかどうかは、いくつかの要因 (クエリ、テーブル内の行数、インデックスの値の分布など) に依存するため、一般的なルールを与えることはできません。使用される」または「これは使用されません」。

概念マニュアルも参照することをお勧めします: http://docs.oracle.com/cd/E11882_01/server.112/e25789/indexiot.htm#BABHJAJF

于 2012-11-27T17:22:47.263 に答える
0
  1. 使用できるインデックス (一意または非一意) がない場合にのみ、インデックスを作成します。つまり、(ENC_ID など) のインデックスを指定した場合、PK を追加するとそのインデックスが使用されるだけで、別のインデックスは作成されません。

  2. ENC_ID でフィルタリングしておらず、結合するだけで、そのテーブルから駆動しているかのように、フィルタリング列はインデックスを作成する必要があるため、クエリによってはまだ利点がある場合があります (たとえば、別のクエリを使用できる場合)。テーブル アクセスが行われる前に行を削除するためにインデックスを結合します) 他のテーブルから駆動している場合は、前縁に ENC_ID を持つインデックスを使用する必要があります.より明確な情報を提供するには、SQL を確認する必要があります。でも答える。

于 2012-11-27T17:23:23.017 に答える