See http://blakeley.com/blogofile/archives/560/

Assuming the data is in the database, you should also restructure your code to 
use cts:element-values instead of distinct-values.

-- Mike

On 22 Jun 2012, at 18:08 , Danny Sinang wrote:

> Hi,
> 
> I'm trying to simulate a SQL SELECT ... Group By functionality via an ML 
> xquery script.
> 
> So I wrote a searchLogs function that uses search:search to return a list of 
> logs that match some given filters. So far, it runs very fast.
> 
> For the Group By part, I was able to write something that works but it's 
> turning out to be very slow. When searchLog returns 2,500 rows, it takes 1 
> minute or so to generate group totals.
> 
> The code is a bit complex as it handles multi-column groupBy's recursively. 
> But the basic logic goes like this :
> 
> let $results := local:seachLogs($searchQuery)
> let $userIds := fn:distinct-values($results/userId)
> for $userId in $userIds
> let $userLogs := $results[userId=$userId]
> let $userTotal := fn:count($userLogs)
> return 
>             <userId>{$userId}</userId>
>             <userTotal>{$userTotal}</userTotal>
>             <book> {
>             let $bookIds := fn:distinct-values($userLogs)
>             for $bookId in $bookIds
>             let $bookLogs := $userLogs[bookId=$bookId]
>             let $bookTotal := fn:count($bookLogs)
>             return 
>             <bookId>{$bookId}</bookId>
>             <bookTotal>{$bookTotal}</bookTotal>
> 
>             } </book>
> 
> I did some crude timings via xdmp:log() and saw that the red lines above eat 
> up like 30 milliseconds for each user / book row. With thousands of rows to 
> be processed, the delays all add up and become noticeable.
> 
> Can anybody here suggest a way to speed this thing up dramatically ?
> 
> If not, I'm thinking of inserting the raw results into an SQL table and 
> letting SQL do the group totals.
> 
> Regards,
> Danny
> 
> _______________________________________________
> General mailing list
> [email protected]
> http://community.marklogic.com/mailman/listinfo/general

_______________________________________________
General mailing list
[email protected]
http://community.marklogic.com/mailman/listinfo/general

Reply via email to