2017-01-13 1 views
0

배열 인덱싱을 통해 쿼리를 빠르게 처리하려고하는데 올바른 결과를 얻을 수 없습니다.중첩 된 배열 쿼리에 대한 Couchbase 인덱싱

SELECT count(*) FROM pacientes UNNEST COMPOSITION.content contentItem 
WHERE contentItem.items IS NOT NULL AND ANY i WITHIN contentItem.items 
SATISFIES i.archetype_id="at0007" AND i.`value`.`value` < 200 AND 
i.`value`.`value` > 100 END; 

나는 다음과 같은 인덱스를 만드는 시도했다, 그러나 아무도가 작동하지 않습니다 :

CREATE INDEX idx_item_value ON pacientes (ARRAY i FOR i IN 
COMPOSITION.content.items.`value`.`value` WHEN i.archetype_id="at0007" END); 

CREATE INDEX idx_item ON pacientes 
(ARRAY i FOR i IN COMPOSITION.content.items END); 

CREATE INDEX idx_item ON pacientes UNNEST COMPOSITION.content contentItem 
(ARRAY i FOR i IN contentItem.items WHEN i.archetype_id="at0007" END); 

어떤 제안?

답변

0

CREATE INDEX 문에서 ARRAY 대신 DISTINCT ARRAY를 사용하십시오.

다음은 수정 된 쿼리 및 인덱스입니다.

SELECT count(*) 
FROM pacientes AS p 
UNNEST COMPOSITION.content AS contentItem 
WHERE 
     ANY ci IN p.COMPOSITION.content SATISFIES 
      (ANY i WITHIN ci.items SATISFIES 
       i.archetype_id="at0007" 
       AND i.`value`.`value` < 200 
       AND i.`value`.`value` > 100 END 
      ) 
     END 
; 

CREATE INDEX idx_archetype ON pacientes(DISTINCT ARRAY (DISTINCT ARRAY i.archetype_id FOR i WITHIN ci.items END) FOR ci IN COMPOSITION.content END); 

CREATE INDEX idx_value ON pacientes(DISTINCT ARRAY (DISTINCT ARRAY i.`value`.`value` FOR i WITHIN ci.items END) FOR ci IN COMPOSITION.content END); 
+0

이미 DISTINCT를 사용해 보았습니다. 쿼리는 인덱스를 사용하지 않습니다. – crigore

관련 문제