3

データベース内の特定の列値のインデックスを生成することは可能ですか?たとえばstatus、値を持つという列があります{0,1,2,3}が、ステータス2はほとんどの場合呼び出されるので、その値に具体的にインデックスを付けたいと思います。これは可能ですか?構文は、次のように降順でインデックスを作成する方法と似ていると思います。

create index foo on table(bar desc);

私は潜在的にこれが機能しているのを見ることができました:

 create index foo on table(status 2);

これによりmissing right parenthesis、SQLdeveloperでOracleデータベースに対してエラーが発生します。

4

1 に答える 1

8

関数ベースのインデックス..。

create index foo on table(case status when 2 then status end)

...そして述語..。

...
where case status when 2 then status end = 2

...これのためのものです。

これは、btreeインデックスからのnull値の省略を利用します。ケース式は、ステータスが2の場合は「2」を返し、それ以外の場合はnullを返すため、インデックスにはstatus="2"のエントリのみが含まれます。ご覧のとおり、別の述語が必要です。他のいくつかのRDBMSは、率直に言って、これを少しうまく処理します。

于 2012-12-19T17:50:35.403 に答える