2017-06-13 6 views
0

これで、CosmosDbコレクションのインデックスポリシーは一貫性があり、自動的に設定されます。デフォルトのハッシュインデックスと範囲インデックスには独自のタイムスタンププロパティそれらによって並べ替えるために。Azure CosmosドキュメントDBのカスタムインデックス作成が機能しない

パスが正しいことはわかっています。私はパスを正しく設定していないと注文できません。しかし:

組み込みのプロパティ_tsコスモスによるソート - [並べ替えクエリのためのコストは、20 RU/sののようなものです。それは素晴らしいことです。 今、私たちの自身タイムスタンプ列でソート(我々は1が文字列のタイムスタンプであり、他方はちょうどビルトイン_tsとしてUnixbased数である2を持っている場合。 このクエリは、400 RUのコスト/ S!???

が新しいインデックス規則は、それを照会し、オーダーすることが私たちを有効にしても、のRUなぜこれがあるとどのように我々はそれに対処します。非常識です置く?

私はあなたのことを知っていますインデックス作成のポーリングを変更できませんでしたAd Hocは以前のように氷であったが、これはマイクロソフトによれば対処されている。

EDIT:それは何のパーティションが設定されていない、シンプルなコレクションで、クエリは、この専用のコレクションに対して実行されます、1つのドキュメントのみ(トップ1)を選択。

SELECT top 1 * FROM c WHERE c.AllCompleted = true ORDER BY c.EndFetchDateTimeUtcUnix DESC

SELECT top 1 * FROM c WHERE c.AllCompleted = true ORDER BY c._ts DESC

インデックスは次のように探して: { "indexingMode": "consistent", "automatic": true, "includedPaths": [ { "path": "/", "indexes": [ { "kind": "Hash", "dataType": "Number", "precision": 3 }, { "kind": "Hash", "dataType": "String", "precision": 3 } ] }, { "path": "/EndFetchDateTimeUtcUnix/?", "indexes": [ { "kind": "Range", "dataType": "Number", "precision": -1 }, { "kind": "Hash", "dataType": "String", "precision": 3 } ] } ], "excludedPaths": [] }

+0

カスタムクエリから返されるドキュメントの数と_tsの順序、およびこのクエリが単一のパーティションに限定されているかどうかなどの追加情報を含めることができますか? –

+0

もちろん、それは唯一のものです。上記の投稿をクエリとインデックスで編集しました。 – imbageek

答えて

0

それはここにあなたがヒットしていること場合、インデックス衝突(複数の値が同じインデックス用語にマッピングすることができ)。

オーダーバイアイテムが最小値または最大値を認識している場合は、オーダーバイアイテムにフィルタを追加して検索されたインデックス用語の範囲を絞り込むことができます。例えば

SELECT * FROM C WHWE c.DateTime '2000-01-01T00:00:00.0000000Z' 間 '3000-01-01T00:00:00.0000000Z' ORDER BY c.DateTime

同様に、同じテクニックを数値のタイムスタンプに適用できます。

+0

ただし、数値は-1(最大)に設定されます。上記の編集済みの記事を参照してください。 – imbageek

0

私は、DocumentDBがその努力を費やしていることを調査することをお勧めします。手がかりを探すにはQuery execution metricsヘッダーを参照してください。

関連する問題