2016-06-22 1 views
0

古い文書には存在しないプロパティとの下位互換性をサポートするためにクエリを拡張しなければならなかったので、IS_DEFINEDメソッドを使用してブール値フィールドが存在するかどうかを確認しましたオブジェクト上にDocumentDB Extreme Query Cost IS_DEFINEDを使用

は、私はちょうどこれを使用することによってRUコストがパネルから上昇1.5万%

SELECT T.id行くことに気付きましたT WHERE T.customerId = @CustomerID

コスト:〜3 RU

SELECT T.idパネルFROM T WHERE T.customerId = @CustomerID AND(T.archived = false)を

COST:〜4 RU

SELECT T.idパネルFROM T WHERE T.customerId = @CustomerID AND(IS_DEFINED NOT(T.archived)OR T.archived = false)を

COST:〜450 RU

これはブール値フィールドではかなり大きな差があり、実際にスループットに打撃を与えます。

UPDATE:ここに関連する問題が見つかりました - DocumentDB Query Requires Unexpected High RUs

ではないが問題であるように見えるので、のようなロジックのいくつかの種類必要があります:パネルFROM

SELECT T.idをT WHERE T.customerId = @CustomerId AND IIF(IS_DEFINED(T.archived)、T.archived、false)= false

しかし、それでもスキャンは関係すると思いますか?

UPDATE 2:

ずなどの操作を実行しようとしました、そして、それは〜750で入って来たが、それは1500のidフィールドの結果セットを持っていました。

+0

Tristan - 「感謝します」、「アドバイスをお願いします」などの明示的なコメントを追加してください。これは完全に不要であり、削除する必要があります。私はすでに一度それを削除し、あなたはそれを再追加しました。これは不必要で、StackOverflowのコンテキストでは、まったく不要です。さらに:StackOverflowはボランティアで実行されるサイトなので、緊急性について言及するのは順調ではありません。 –

+0

私はポストに触れていませんが、UPDATEとUPDATEの2つのパートを追加します。 –

+0

調査するために、クエリのエンドポイントとアクティビティIDを[email protected]に電子メールで送信できますか?Is_Definedではインデックスを使用できませんが、クエリでは引き続きCustomerIDインデックスを使用できます。 –

答えて

0

T.customerId = @CustomerIdのフィルタでは、customerIdのインデックスをクエリで使用できますが、archivedのインデックスは使用できません。 NOTを使用したクエリフィルタでは、(任意のデータベースのように)DocumentDBのインデックスは使用されません。スキャンすると消費されるRUsの数が多くなります。

つまり、特定のクエリの実行計画が異なる可能性があります。 DocumentDBは管理サービスなので、Azureサポートチケットを発行するか、[email protected]に電子メールを送信することで、DocumentDBチームにパフォーマンスの問題をデバッグさせることができます。

関連する問題