2017-01-13 9 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

関連する問題