Dynamics CRM 簡易検索のベストプラクティス

みなさん、こんにちは。

今日は開発者の方向けの情報として、簡易検索の
パフォーマンスをベストプラクティスを紹介します。

簡易検索機能とは

簡易検索機能とは、高度な検索と対をなす機能であり、以下の
ようにエンティティのグリッドで利用できる検索機能です。

image

では早速簡易検索の詳細を確認しましょう。

カスタマイズ方法

簡易検索はエンティティのビューとして定義されます。
各エンティティには以下のように簡易検索専用のビューが
提供されます。

image

以下の手順でカスタマイズが可能です。

1. エンティティのカスタマイズ画面より、ビューを選択します。

2. 種類が簡易検索ビューとなっているビューを開きます。

3. 表示列の変更はビュー列の追加や削除、並び替えを
利用して設定します。これは通常のビュー通りです。

4. 通常のビューと同じく、フィルター条件を編集できます。
取引先企業の場合以下のように状態としてアクティブな
ものを抽出するように設定されています。

image

5. 検索列の追加をクリックすることで、簡易検索実行時に
検索対象となる列を指定できます。

image

検索したい列が表示されない場合は、列自体が検索可能に
指定されていません。フィールドのプロパティより検索可能に
設定を行います。

image

パフォーマンスに関する考察

簡易検索はその性質上、上記設定で検索列に指定された
列に対し、前方一致検索を実施します。つまり検索文字列
として 「あ」 を指定した場合、「あ」 で始まるという意味に
なります。

数字以外を入力した場合、数字列に対する検索は最適化が
行われた結果実行されませんが、数字を入れた場合には、
数字列だけでなく文字である可能性もあるため、文字列も
検索対象となります。

またそれぞれの列に対する検索結果は OR 条件として表示
されるため、テーブルに対し複数回読み取りが実行されます。
簡易検索のパフォーマンスが悪い場合は、以下のベスト
プラクティスを参考にチューニングを行ってください。

簡易検索のベストプラクティス

- 検索列は必要に応じて既定から変更してください。できる
限り少ない列数に絞ることを推奨します。

- 検索時には極力長い文字列を入力して、検索結果が少なく
なるようにしてください。

- 検索文字列に先頭に 「*」 を利用するとテーブルスキャンが
発生するため、本当に必要な時以外は避けてください。その
場合、高度な検索を利用することを推奨します。
※高度な検索の場合、列をより明確に指定できるため

- オプションセットの検索は避けてください。これはラベルを
検索する行為であるためです。その場合は高度な検索を
利用してください。

- 設置型の場合、検索対象列に正しくインデックスが設定
されており、メンテナンスされているか確認してください。

簡易検索に関する設定

簡易検索に関して、以下 2 点の設定が存在します。

簡易検索レコード上限の設定

システム設定より有効にできる設定で、上限である 1 万件
を結果セットが超える場合、エラーを表示してクエリを実行
しません。これによりユーザーが検索文字列をより具体的
にする可能性が高くなります。

image

EnableQuickFindOptimization

Update Rollup 10 で実装された簡易検索パフォーマンス
向上機能の有効/無効を切り替えることが可能です。既定
は有効ですが、手動で無効に変更が可能です。

Update Rollup 10 以降で簡易検索が遅くなった場合のみ
設定を無効にしてください。

https://support.microsoft.com/kb/2691237/

まとめ

簡易検索はユーザーには非常に便利で手軽な機能である
一方、正しく設定、運用を行わないとパフォーマンスに影響が
出ます。多くの場合、多すぎる検索対象列とインデックスの
不在が問題を起こしているように思います。

是非今回の記事を参考に現在の設定等を見直してください。

- Dynamics CRM サポート 中村 憲一郎