2016年7月10日日曜日

逆キーインデックスを試してみた

インデックスは木構造で作成されていることから、シーケンシャルにキーが追加されるような使われ方がする場

合は、
インデックスの右端の部分のブロックが集中的にアクセスされてしまいます。
この状態で並列処理がされると、大量のラッチ待ちが発生してしまいます。

Fig1:インデックス構造

このような場合、一つの解決策として逆キーインデックスがあります。
キーの値を逆にすることにより、集中的にアクセスするブロックを無くし、満遍なくアクセスされるようにするというわけです。
Fig2:逆キーインデックス

■逆キーインデックスの貼り方
インデックスの作成
CREATE INDEX <インデックス名> ON <テーブル名> (カラム1[,カラム2]) REVERSE;


既存のインデックスを逆キーインデックスにする
ALTER INDEX <インデックス名> REBUILD REVERSE;

既存のインデックスを通常のインデックスにする
ALTER INDEX <インデックス名> REBUILD NOREVERSE;

■実際にやってみた
インデックスキーが貼られている列に対してシーケンシャルに+1し続ける行追加を繰り返してみた。

同時実行数:2
100件インサート
インデックス    151.8秒
逆キーインデックス 144.3秒

あまり値が変わらなかった。同時実行数をさらに追加して今度試してみようと思う。

■制限事項
逆キーインデックスには以下の制限事項がある。
・範囲指定をする際に、逆キーインデックスは使用できない

0 件のコメント:

コメントを投稿