インデックス【ORACLE】ビットマップ・ファンクション・逆キー・パーティションインデックスの作成ここではORACLEデータベースでビットマップ・ファンクション・逆キー・パーティションインデックスの作成する方法を紹介しています。インデックスの作成や一覧の確方法は↓で紹介しています。>>【ORACLE】インデックス(索引)を作成・変更・削除するSQL>>【ORACLE】インデックスの一覧を確認するSQLビットマップインデックスビットマップインデックスとは列がある値に対する有無を、値と01のビットマップで管理しているインデックスです。男性を001という値、女性を002という値で表したとき1行目のレコードが男性の場合、ビットマップインデックスは次のようなイメージになります。001:1002:0というように、それぞれの値に対して、0か1かを保持します。ビットマップインデックスを作成するSQLビットマップインデックスは、通常のインデックスと同様にCREATE文を使います。インデックス名の前にBITMAPキーワードを指定します。表領域名];次のSQLではEMPLOYEEテーブルのGENDER列に対して、ビットマップインデックスを作成しています。tbs1;ファンクションインデックスファンクションインデックスとはファンクションインデックスとは、値ではなく、何らかの関数を使って処理した結果でインデックスを作ることが出来ます。ある列の値をLEFT関数で左から3文字切り取りした値を使って検索したい場合、LEFT関数で切り取った値をインデックスとして事前に登録することが出来ます。ある列の値を変換した値としてインデックスに保持することが出来ます。ファンクションインデックスを作成するSQLファンクションインデックスは、通常のインデックスと同様にCREATE文を使います。ファンクションインデックスを作成するSQLの基本構文は次の通りです。表領域名];次のSQLでは、DEPT_IDの左から3文字を切り取る関数をファンクションインデックスとして作成しました。このファンクションインデックスは、SELECT文のサンプルのように「LEFT(dept_id,3)」をWHERE句の条件に指定したときに利用されます。逆キー索引とは逆キー索引とは、キーの値のバイトを通常とは逆の順番で格納します。社員マスタに大量に社員を登録するとき、連続した社員IDを割り振ってINSERTを行ったとします。どのINSERTも社員マスタの最後尾にデータを登録しようとして、最後尾のあるリーフブロックにアクセスが集中します。最後尾のあるリーフブロックだけに負荷が集中します。逆キー索引にすることでI/O分散が図れ、パフォーマンスの向上が図れます。逆キー索引には注意点があります。バイトの順番を逆に反転させているので、範囲指定をした検索(<、>など)ではインデックス検索されません。逆キー索引を作成するSQL逆キー索引は、通常のインデックスと同様にCREATE文を使います。REVERSE句を指定します。表領域名]REVERSE;次のSQLではEMPLOYEEテーブルのID列に対して、逆キー索引を作成しています。tbs1REVERSE;パーティションインデックスパーティションインデックスとはパーティションインデックスとは、テーブルとインデックスを同じ項目でパーティション化したものです。テーブルが年月を四半期ごとに4~6、7~9、10~12、1~3とパーティションしている場合に、インデックスも同じく年月の四半期ごとにパーティション化することが出来ます。パーティション化することで、パラレルでSQLを実行したときには、非常に高いパフォーマンスが期待出来ます。パーティションインデックスを作成するSQLパーティションインデックスは通常のINDEXと同様にCREATE文を使います。CREATE文の最期にLOCAL句を付けることで、テーブルと同一のパーティションでパーテイションインデックスを作成することが出来ます。LOCAL;パーティションごとに表領域を指定する場合は次のように書きます。IN(idx1,idx2,idx3);最後にインデックスの作成や変更、削除には↓の権限が必要です。INDEXシステム権限の付与の方法については↓で紹介していますので参考にしてください。