ヒント
Dataverse クエリを作成する際に一般的に避けるべきことについての指針については、クエリのアンチ パターンを参照してください。 次のセクションは FetchXml に固有です。
遅いマテリアライズ クエリ
多数の検索列と計算列を選択し、パフォーマンスの問題が発生する場合は、fetch要素 ブール値 latematerialize 属性を設定してみてください。 この設定は舞台裏でクエリを小さな部分に分割し、結果を返す前に再組み立てします。
latematerialize 属性を使用することで、必ずしもパフォーマンスが向上するとは限りません。 単純なクエリの実行が遅くなる可能性があります。 次のようなクエリの場合に最も有益です:
- 結合が多い
- 多数の参照列または計算列を含む
クエリのヒント
重要
これらのオプションは、Microsoft テクニカル サポートによって推奨された場合にのみ適用してください。 これらのオプションを誤って使用すると、クエリのパフォーマンスが損なわれる可能性があります。
Microsoft SQL Server はクエリを最適化するための多くのクエリ ヒントをサポートします。 FetchXML はクエリ ヒントをサポートし、フェッチ要素オプション属性を使うことにより、SQL Server に渡すことができます。
| クエリ オプション | SQL Server ヒント |
|---|---|
ForceOrder |
強制注文 |
DisableRowGoal |
ヒント: DISABLE_OPTIMIZER_ROWGOAL |
EnableOptimizerHotfixes |
ヒント: ENABLE_QUERY_OPTIMIZER_HOTFIXES |
LoopJoin |
ループ結合 |
MergeJoin |
マージ結合 |
HashJoin |
ハッシュ結合 |
NO_PERFORMANCE_SPOOL |
NO_PERFORMANCE_SPOOL |
ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS |
ヒント: ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS |
ノー ロック
以前のバージョンでは、no-lock 属性はレコードの共有ロックを防ぐために使用されていました。 この属性を含める必要はなくなりました。
ユニオンのヒント
異なるテーブルの列に対して条件を設定するフィルター要素を追加する場合、hint 属性を union に設定することでパフォーマンスを向上させることができます。 ただし、いくつかの制限があります。
-
フィルター は
orフィルター タイプを使用する必要があります。 - 各クエリには
unionヒントを 1 つだけ含めることができます。 -
unionヒントを持つフィルターがトップレベルのフィルターではない場合、 Dataverse クエリを変換し、unionヒントを持つフィルタをルートフィルタに移動します。 -
unionヒントの深さが 3 レベルを超える場合、ヒントは無視されます。
以下の例では、union テーブルと telephone1 テーブルの両方で、 列に のヒントを持つフィルターを設定しています。
<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>
自動クエリの最適化
低速クエリのパフォーマンスが向上しても、ユーザー側で変更を行わなくても驚かないでください。 Dataverse は、パフォーマンスを向上させるために、データ取得操作を積極的に監視します。 標準テーブルを使用する特定のクエリのパフォーマンスが低い場合、Dataverse はクエリのパフォーマンスを向上させる変更を自動的に行う可能性があります。 この動作により、後で再現できないため、特定のパフォーマンスの問題が一時的に発生する可能性があります。
自動クエリの最適化では、構成は必要ありません。 既定では、すべてのユーザーに対して有効になっています。
参照
FetchXML を使用してデータのクエリを実行する
FetchXML を使用してデータを取得する
FetchXml を使用して列を選択する
FetchXml を使用してテーブルを結合する
FetchXml を使用して行を並び替える
FetchXml を使用して行をフィルターする
FetchXml を使用したページ結果
FetchXML を使用してデータを集計する
FetchXml を使用して行をカウントする
FetchXml リファレンス
FetchXml サンプル コード
アンチ パターンのクエリ