インデックス作成メトリックの結果を分析する
インデックス作成メトリックの情報の使い方をよりよく理解するために、サンプル クエリをいくつか見てみましょう。
最初の SQL クエリは、コンテナー内の項目のうち、price プロパティの値が 500 を超える項目をすべて取得するものです。
SELECT
*
FROM
products p
WHERE
p.price > 500
この例で取り上げるすべてのクエリは、既定のインデックス作成ポリシー (下記) が使用されていることを前提としています。
- 一貫したインデックス作成モードを使用し、項目のインデックスを自動的に作成する
- すべてのプロパティ パスを対象にする
- eTag プロパティ パスは明示的に除外する
- 複合インデックスは一切含まない
このクエリを実行してインデックス作成メトリックを出力すると、このクエリがインデックスの /price/?
フィールドに与える影響が非常に大きいことがわかります。 このフィールドは既定のインデックス作成ポリシーに含まれているため、インデックス作成メトリックは、このフィールドをインデックスに追加することを推奨していません。
Index Utilization Information
Utilized Single Indexes
Index Spec: /price/?
Index Impact Score: High
---
Potential Single Indexes
Utilized Composite Indexes
Potential Composite Indexes
次のクエリのフィルターは、先ほどよりもやや複雑です。組み込みの文字列関数を使用して、name プロパティが Touring という語で始まる項目を探しています。
SELECT
*
FROM
products p
WHERE
p.price > 500 AND
startsWith(p.name, 'Touring')
このクエリのインデックス作成メトリックを見ると、/price/?
と /name/?
の両方のプロパティ パスが大きな影響を及ぼしていることがわかります。 既定のインデックス作成ポリシーではこの両方のフィールドが対象になるので、現時点ではこれ以上のインデックスは推奨されません。
Index Utilization Information
Utilized Single Indexes
Index Spec: /price/?
Index Impact Score: High
---
Index Spec: /name/?
Index Impact Score: High
---
Potential Single Indexes
Utilized Composite Indexes
Potential Composite Indexes
最後のサンプル クエリでは、categoryName フィールドの値に基づく等値フィルターを使用します。 この例では、このフィールドが Bikes, Touring Bikes と等しいことが、フィルター式を満たす条件となります。
SELECT
*
FROM
products p
WHERE
p.price > 500 AND
p.categoryName = 'Bikes, Touring Bikes'
今度は、インデックス作成メトリックからの提案が先ほどよりも強めにでそうです。 予想どおり、/price/?
と /categoryName/?
プロパティ パスの影響が大きくなっています。 ただし、このインデックス作成メトリックは、今後クエリのパフォーマンスを向上させるために、両方のプロパティ パスを使って複合インデックスを作成することを推奨しています。
Index Utilization Information
Utilized Single Indexes
Index Spec: /price/?
Index Impact Score: High
---
Index Spec: /categoryName/?
Index Impact Score: High
---
Potential Single Indexes
Utilized Composite Indexes
Potential Composite Indexes
Index Spec: /categoryName ASC, /price ASC
Index Impact Score: High
---
この提案に従って、price と categoryName の両方のプロパティ パスを昇順として追加した複合インデックスを使用して新しいインデックス作成ポリシーを作成しましょう。
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [],
"compositeIndexes": [
[
{
"path": "/categoryName",
"order": "ascending"
},
{
"path": "/price",
"order": "ascending"
}
]
]
}
インデックスを更新してから .NET でクエリを再実行すると、最新のインデックス作成メトリックを観察できます。 新しいメトリックのメタデータから、直近のクエリ実行で複合インデックスが利用されたことがわかります。
Index Utilization Information
Utilized Single Indexes
Potential Single Indexes
Utilized Composite Indexes
Index Spec: /categoryName ASC, /price ASC
Index Impact Score: High
---
Potential Composite Indexes