2017-01-03 2 views
0

Ich habe eine Abfrage wie untenNotwendigkeit Leistung verwenden Aggregat N1QL

select sum(ARRAY_SUM(DailyCampaignUsage.`data`[*].cost)) revenue from 
Inheritx DailyCampaignUsage WHERE DailyCampaignUsage._type='DailyCampaignUsage' 

es 12.3s

hier count (array_sum (DailyCampaignUsage. data [*]. Kosten)) nimmt es ist 51k

Wie kann ich es Leistung verbessern? Ich habe Index wie unten

CREATE INDEX `abc` ON `Inheritx`(`_type`) USING GSI 

Antwort

1

Verwenden eine abdeckende Teilindex.

CREATE INDEX idx_covering ON Inheritx(_type, data[*].cost) WHERE _type = 'DailyCampaignUsage'; 

select sum(ARRAY_SUM(DailyCampaignUsage.`data`[*].cost)) revenue 
from Inheritx DailyCampaignUsage USE INDEX (idx_covering) 
WHERE DailyCampaignUsage._type='DailyCampaignUsage' 
+0

Dank nun 1s nehmen Aber wie kann ich seine Leistung ROUND (Summe (Fall, wenn DailyCampaignUsage.day zwischen ‚2016.12.01‘ und ‚2016.12.05‘ verbessern THEN ARRAY_SUM (DailyCampaignUsage "Daten" [*]. Kosten) ELSE 0 ENDE) –