2017-01-13 3 views
0

Ich versuche, die Abfrage unten durch Array-Indizierung zu beschleunigen, und ich kann es nicht richtig machen.Couchbase-Indizierung für verschachtelte Array-Abfrage

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; 

Ich habe versucht, die folgenden Indizes zu erstellen, aber keiner funktioniert:

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); 

Irgendwelche Vorschläge?

Antwort

0

Verwenden Sie in Ihren CREATE INDEX-Anweisungen DISTINCT ARRAY anstelle von ARRAY.

Hier sind die überarbeitete Abfrage und Indizes.

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

Ich habe bereits versucht, mit DISTINCT, die Abfrage verwendet den Index sowieso nicht. – crigore

Verwandte Themen