2016-06-22 2 views
0

이전 문서에 존재하지 않을 수있는 속성과의 하위 호환성을 지원하도록 쿼리를 확장해야했습니다.이를 위해 IS_DEFINED 메서드를 사용하여 부울 필드가 있는지 확인했습니다 개체에.DocumentDB 익스트림 쿼리 비용을 사용하여 IS_DEFINED

난 그냥이를 사용하여 RU 비용이 패널로부터 15,000%

SELECT T.id가는 것으로 나타났습니다 T WHERE T.customerId = @CustomerID

비용 : ~ 3 패널 T WHERE T.customerId = @CustomerID AND (= 거짓 T.archived)

FROM RU

SELECT T.id3210

비용 : 패널 T WHERE T.customerId = @CustomerID AND (IS_DEFINED NOT이 거짓 (T.archived) 또는 T.archived =)

FROM ~ 4 RU

SELECT T.id 비용 : ~ 450 RU

부울 필드의 경우 상당히 큰 차이점이 있으며 처리량에 큰 타격을줍니다.

UPDATE : 여기에 관련된 문제를 찾을 수 - DocumentDB Query Requires Unexpected High RUs

이 NOT이 문제가되는 것 같은데, 그래서 같은 논리의 일종 필요 : 패널 FROM

SELECT T.id을 T WHERE T.customerId = @ 고객 ID 및 IIF (IS_DEFINED (T.archived), T.archived, false) = false

하지만 여전히 스캔과 관련이있을 것 같습니까?

UPDATE 2 :

하지 않고 작업을 실행했는데, 그것은 ~ 750 억원,하지만 그것은 1500 개 ID 필드의 결과 집합을했다.

+0

트리스탄 (Tristan) - '감사합니다', '조언 해주십시오'와 같은 명시 적 주석을 추가하지 말고 최대한 빨리 처리해야한다고 언급하십시오. 이것은 완전히 불필요하므로 제거해야합니다. 이미 한 번 제거한 후에 다시 추가했습니다. 그것은 불필요하며, StackOverflow의 컨텍스트에서 완전히 불필요합니다. StackOverflow는 자원 봉사자가 운영하는 사이트이므로 긴급 성을 언급하는 것이 잘되지 않습니다. –

+0

나는 두 부분을 업데이트하고 업데이트하는 것을 제외하고는 게시물을 수정하지 않았다. –

+0

조사 할 수 있도록 [email protected]에 쿼리의 끝점과 활동 ID를 전자 메일로 보내주십시오.Is_Defined가 인덱스를 사용할 수는 없지만 쿼리는 여전히 CustomerID 인덱스를 사용할 수 있습니다. –

답변

0

T.customerId = @CustomerId의 필터는 customerId의 인덱스를 쿼리에서 사용할 수 있지만 archived의 인덱스는 사용할 수 없습니다. NOT을 사용하는 쿼리 필터는 모든 데이터베이스와 마찬가지로 DocumentDB에서 인덱스를 사용하지 않습니다. 스캔을 수행하면 더 많은 RU가 소비됩니다.

즉, 특정 쿼리에는 다른 실행 계획이있을 수 있습니다. DocumentDB는 관리 서비스이므로 Azure 지원 티켓을 제출하거나 [email protected]으로 전자 메일을 보내 DocumentDB 팀이 성능 문제를 디버깅하도록 할 수 있습니다.

관련 문제