Version 2014.1.x ~
  外れ値とは何ですか?

テーブルチューニングを行った際に、フィールドに値がほとんど登録されていない(Null)場合や、特定の値がほとんどを占める場合、その値を [外れ値] として除外して選択性計算を行います。

また、外れ値が全レコードの何 % を占めているかの値は [外れ値の選択性] として記録されます。

InterSystems製品 のクエリオプティマイザは、選択性数値とエクステントサイズを使用してクエリの経路を決定しますが、クラスクエリ、埋め込み SQL に使用しているクエリに外れ値が含まれる場合は、外れ値の選択性が自動的に考慮され、インデックスの使用有無を決定しています。
ダイナミック SQL 、ODBC/JDBC 経由でのクエリについては、外れ値が Null である場合、自動的に外れ値の選択性が考慮されますが、Null 以外の特定の値が外れ値に検出される場合は、明示的に指示を与えるまで考慮しません。詳細は、以下のドキュメントをご参照ください。

異常値に対する述語条件【IRIS】
異常値に対する述語条件

SAMPLES ネームスペースの Sample.Person テーブルの FavoriteColors には、好きな色が複数格納されていますが未登録(NULL)の値も多く含まれています(インストール直後の状態で 200 件中 71 件がNULL)。
選択性の計算で FavoriteColors を外れ値と認識した場合、[外れ値]に NULL、[外れ値の選択性]に 35.5% (71/200×100=35.5)が表示されます。

※ IRIS/IRIS for Health でお試しいただく場合の Sample.Person 作成方法 ※

IRIS/IRIS for Health にはSAMPLESネームスペースはありませんので、任意のネームスペースに Sample.Person のサンプルをインポートします。

サンプルインポート方法詳細は、以下ドキュメント、または関連トピック【サンプル(Sample.Person)のクラス定義ダウンロードとサンプルデータの作成について】をご参照ください。
InterSystems IRIS で使用するサンプルのダウンロード

IRIS/IRIS for Health でお試しいただく場合、以降の説明に登場する SAMPLES ネームスペースは、Sample.Person クラスをインポートしたネームスペースに読み替えてお試しください。


管理ポータルで確認できます。
1、[システムエクスプローラ] > [SQL] を開きます。

2、画面中央上部にある[変更]を押下し、ネームスペースをSAMPLESに切り替えます。



3、画面左側のスキーマのプルダウンを Sample を選択し、テーブルの ▶ をクリックし、Sample.Personを選択します。



4、画面右側で「カタログの詳細」タブを選択し、ラジオボタン:フィールドを選択します。

5、FavoriteColors の行に[外れ値]と[外れ値の選択性]が表示されていることを確認します。



外れ値を考慮したプランを確認するため、Sample.Person クラスに FavoriteColors に対するインデックスを追加し、インデックスを再構築します。

/// インデックス例 ※FavoriteColorsはリストコレクションで定義されています
Index FavoriteColorsIdx On (FavoriteColors(ELEMENTS), FavoriteColors(KEYS));

// クラス定義コンパイル後、インデックスを再構築します。
SAMPLES>do ##class(Sample.Person).%BuildIndices($LB("FavoriteColorsIdx"))


管理ポータル、またはターミナルで以下のSQLを実行し、クエリプランを確認します。
 

select ID,Name from Sample.Person where FavoriteColors is null
// プラン表示は以下の通り
↓↓↓↓↓↓↓↓  // Read master map = レコード全体を参照したことを示します
Read master map Sample.Person.IDKEY, looping on ID.
For each row:
    Output the row.


where FavoriteColors is null を指定した場合、ダイナミック SQL でも外れ値:Null を考慮したプランを選択するため、インデックス:FavoriteColorsIdx が使用されていないことがわかります。

次に、条件式をNull以外に変え実行します。

 

select ID,Name from Sample.Person where for some %element(FavoriteColors) (%value='red')
// プラン表示は以下の通り
Call module B, which populates bitmap temp-file A.
Read bitmap temp-file A, looping on ID.
For each row:
    Read master map Sample.Person.IDKEY, using the given idkey value.
    Output the row.

 

↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓FavoriteColorsIdxを使用したことがわかります
 

Read index map Sample.Person.FavoriteColorsIdx, using the given %SQLUPPER(Subvalue(FavoriteColors)), and looping on %EXACT(Subvalue(FavoriteColors)) and ID.
For each row:
    Add ID bit to bitmap temp-file A.


インデックスが使用されていることがわかります。

外れ値について詳細は、以下のドキュメントをご参照ください。

Selectivity と Outlier Selectivityについて【IRIS】

Selectivity と Outlier Selectivityについて

※上記ドキュメント中の [異常値] や [Outlier] は [外れ値] と同義語です。 


該当する製品: Caché, Ensemble, HealthShare/Caché Based, IRIS Data Platform, HealthShare/IRIS Based, IRIS for Health
関連トピック: クエリをチューニングするにはどのような方法がありますか?
関連トピック:クエリプランの見方を教えてください。
関連トピック:選択性の数値とは何ですか?
関連トピック:サンプル(Sample.Person)のクラス定義ダウンロードとサンプルデータの作成について
添付ファイル:

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

FAQトップに戻る