0

以下のケースの機能インデックスを作成する方法。

CREATE INDEX index1 ON table1(MIN(col1));

以下のエラーが発生しています:SQL Error: ORA-00934: group function is not allowed here

助けてください!

4

2 に答える 2

6

インデックスを作成したい場合は、次のcol1ようなクエリを高速化します。

SELECT MIN(col1)
  FROM table1

その場合、関数インデックスは必要ありません。次のように通常のインデックスを作成するだけです:

CREATE INDEX index1 ON table1(col1);

に機能インデックスを作成すると (可能であれば)、インデックスはすべての行に対してMIN(col1)同じ値 ( の最小値) を持つことになります。col1そのようなインデックスはまったく役に立たないでしょう。

于 2012-06-20T08:06:01.793 に答える
3

より高速に最小値を取得できるようにしたい場合col1(私が想定しているように)、具体化されたビューを使用できます。

create materialized view table1_mat
       refresh on commit 
       as
       select min(col1) min_col1
         from table1;

col1 の最小値を取得すると、次のようになります。

 select min_col1 from table1_mat;

ただし、最小値を選択すると速度が上がる可能性がありますが、挿入と更新の時間はtable1遅くなる可能性があることに注意してください。

クエリの書き換えを使用すると、元のクエリをチェーンせずにマテリアライズド ビューを使用することもできます。

alter materiazlied view table1_mat enable query rewrite;

それで

select min(col1) from table1

マテリアライズド ビューを使用する必要があります。

于 2012-06-20T08:47:04.903 に答える