I'm wading about in several tens of megabytes of health care data, trying
to figure out what connects to which, as it were.  There are a few thousand
relationship elements that define some of the connections, and often more
than one such element per @type, so it's not enough to just group them by
_this_ relationship elements type, I need all the relationship elements
which have a particular type value.

let $relationships as element(relationship)+ := //relationship[@type]
let $relTypes as xs:string+ :=
distinct-values($relationships/@type/string())
let $relByType := map:merge(for $x in $relTypes return
map:entry($x,$relationships[@type eq $x]))
return $relByType

82895.5 ms

let $relationships as element(relationship)+ := //relationship[@type]
let $relByType := map:merge(for $x in $relationships
                            let $key := $x/@type
                            group by $key
                            return map:entry($key,$x))
return $relByType

170.79ms

Holy Wow.

Offered just in case anyone else is wondering why their query is so slow.

-- Graydon

Reply via email to