Version 2011.1.x ~
  データの登録/削除が行われている間でも、インデックスの再構築はできますか?

はい。できます。

ただし、再構築中は更新途中の状態で参照されますので、以下、専用ユーティリティを使用することをお勧めします。

2022.1以降では、$SYSTEM.SQL.Util.SetMapSelectability()を使用します。

(2021.1以前では、$SYSTEM.SQL.SetMapSelectability()を使用します。引数の指定方法は2022.1以降と同様です。)


手順は以下の通りです。

  1. 追加予定のインデックス名をクエリオプティマイザから隠します。
  2. インデックス定義を追加し、再構築を実施します。
  3. 再構築が完了したら、追加したインデックスをオプティマイザに公開します。


実行例は以下の通りです。
Sample.Person の Home_State(連絡先住所の州情報)カラムに対して標準インデックス HomeStateIdx を定義する目的での例で記載します。
 

//1、追加予定のインデックス名をクエリオプティマイザから隠します。
>write $system.SQL.Util.SetMapSelectability("Sample.Person","HomeStateIdx",0)
1
// 2、インデックス定義を追加した後、再構築を実施します。
//  定義例)Index HomeStateIdx On Home.State;
>do ##class(Sample.Person).%BuildIndices($LB("HomeStateIdx"))
// 3、再構築が完了したら、追加したインデックスをオプティマイザに公開します
>write $system.SQL.Util.SetMapSelectability("Sample.Person","HomeStateIdx",1)
1

※2021.1以前では、write $system.SQL.SetMapSelectability("Sample.Person","HomeStateIdx",0) をご利用くださいクラス名が異なります。引数は2022.1以降のユーティリティと同様です)。


インデックスが使用されたか/されないか、の確認はクエリプランを参照します。
以下の例では、ターミナルを $system.SQL.Shell() でSQL実行環境に切り替えた状態でのプラン確認結果を表示しています(管理ポータルで参照する場合は、クエリ実行画面でSQL実行後「プラン表示」ボタンを押下します)。
 

SAMPLES>do $system.SQL.Shell()
SQL Command Line Shell
----------------------------------------------------

The command prefix is currently set to: <>.
Enter q to quit, ? for help.
SAMPLES>>select ID,Name from Sample.Person where Home_State='NY'
1.      select ID,Name from Sample.Person where Home_State='NY'
ID      Name
61      Alton,Debby O.
138     Isaksen,Charlotte L.
175     Walker,Emily O.
3 Rows(s) Affected
statement prepare time(s)/globals/lines/disk: 0.0026s/35/974/0ms
          execute time(s)/globals/lines/disk: 0.0017s/216/2447/0ms
                          cached query class: %sqlcq.SAMPLES.cls1
---------------------------------------------------------------------------
SAMPLES>>show plan    // ★ インデックス未使用時のプラン表示
 
 DECLARE QRS CURSOR FOR SELECT ID , Name FROM Sample . Person WHERE Home_State = ?
Read master map Sample.Person.IDKEY, looping on ID.
For each row:
    Output the row.
SAMPLES>>show plan    // ★ インデックス使用時のプラン表示
 
 DECLARE QRS CURSOR FOR SELECT ID , Name FROM Sample . Person WHERE Home_State = ?
Read index map Sample.Person.HomeStateIdx, using the given %SQLUPPER(Home_State), and looping on ID.
For each row:
    Read master map Sample.Person.IDKEY, using the given idkey value.
    Output the row.
SAMPLES>>


詳細は、以下ドキュメントをご参照ください。
READ および WRITE アクティブシステム上でのインデックスの構築について【IRIS】

READ および WRITE アクティブシステム上でのインデックスの構築について


該当する製品: Caché, Ensemble, 旧HealthShare, IRIS Data Platform, IRIS for Health
関連トピック: クエリプランの見方を教えてください。
関連トピック:アプリケーション使用中にインデックス再構築を複数プロセスで実行できますか?
添付ファイル:

アンケートにご協力をお願いします
このトピックは参考になりましたか?
このトピックに関するお問い合わせ

FAQトップに戻る