次の方法で共有


FetchXml を使用してパフォーマンスを最適化する

この記事では、FetchXml を使用してデータを取得する際のパフォーマンスを最適化する方法について説明します。

遅いマテリアライズ クエリ

多数の検索列と計算列を選択し、パフォーマンスの問題が発生する場合は、fetch要素 ブール値 latematerialize 属性を設定してみてください。 この設定は舞台裏でクエリを小さな部分に分割し、結果を返す前に再組み立てします。

latematerialize 属性を使用することで、必ずしもパフォーマンスが向上するとは限りません。 単純なクエリの実行が遅くなる可能性があります。 次のようなクエリの場合に最も有益です:

  • 結合が多い
  • 多くの列ルックアップ列または計算列が含まれています

クエリのヒント

重要

これらのオプションは、Microsoft テクニカル サポートによって推奨された場合にのみ適用してください。 これらのオプションを誤って使用すると、クエリのパフォーマンスが損なわれる可能性があります。

Microsoft SQL Server はクエリを最適化するための多くのクエリ ヒントをサポートします。 FetchXML クエリ ヒントをサポートし、 fetch要素 options 属性を使用してこれらのクエリ オプションをSQL Serverに渡すことができます。

Query option SQL Server hint
OptimizeForUnknown Optimize for unknown
ForceOrder Force Order
DisableRowGoal Hint: DISABLE_OPTIMIZER_ROWGOAL
EnableOptimizerHotfixes Hint: ENABLE_QUERY_OPTIMIZER_HOTFIXES
LoopJoin Loop Join
MergeJoin Merge Join
HashJoin Hash Join
NO_PERFORMANCE_SPOOL NO_PERFORMANCE_SPOOL
ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS Hint: ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS

More information: Hints (Transact-SQL) - Query

ノー ロック

以前のバージョンでは、no-lock 属性はレコードの共有ロックを防ぐために使用されていました。 この属性を含める必要はなくなりました。

ユニオンのヒント

異なるテーブルの列に対して条件を設定するフィルター要素を追加する場合、hint 属性を union に設定することでパフォーマンスを向上させることができます。 ただし、いくつかの制限があります。

  • フィルターor フィルター タイプを使用する必要があります。
  • 各クエリには union ヒントを 1 つだけ含めることができます。
  • union ヒントを持つフィルターがトップレベルのフィルターではない場合、 Dataverse クエリを変換し、 union ヒントを持つフィルタをルートフィルタに移動します。
  • union ヒントの深さが 3 レベルを超える場合、ヒントは無視されます。

以下の例では、アカウント テーブルと コンタクト テーブルの両方で、telephone1 列に union のヒントを持つフィルターを設定しています。

<fetch>
   <entity name="email">
      <attribute name="activityid" />
      <attribute name="subject" />
      <filter type="and">
         <condition attribute="subject"
            operator="like"
            value="Alert:%" />
         <condition attribute="statecode"
            operator="eq"
            value="0" />
         <filter type="or"
            hint="union">
            <condition attribute="telephone1"
               operator="eq"
               value="555-123-4567"
               entityname="ac" />
            <condition attribute="telephone1"
               operator="eq"
               value="555-123-4567"
               entityname="co" />
         </filter>
      </filter>
      <link-entity name="account"
         from="accountid"
         to="regardingobjectid"
         link-type="outer"
         alias="ac" />
      <link-entity name="contact"
         from="contactid"
         to="regardingobjectid"
         link-type="outer"
         alias="co" />
   </entity>
</fetch>

参照

FetchXML を使用してデータのクエリを実行する
FetchXML を使用してデータを取得する
FetchXml を使用して列を選択する
FetchXml を使用してテーブルを結合する
FetchXml を使用して行を並び替える
FetchXml を使用して行をフィルターする
FetchXml を使用したページ結果
FetchXML を使用してデータを集計する
FetchXml を使用して行をカウントする
FetchXml リファレンス
FetchXml サンプル コード

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。