Thanks Christian,
I changed the query from "transaction/* except (/transaction/traInfo)" to "transaction/*[name() ne 'traInfo']" as suggested by you. later one takes 13 secs to complete while former was taking 21 secs.
LOOP
while((item = itr.next()) != null){
if(count >= start)
System.out.println(/*item.serialize()*/);
count++;
if(count > end)
break;
}
Former Query : "transaction/* except (/transaction/traInfo)"
Loop (executed with java api) takes 18-19 seconds
QueryInfo :
Timing:
- Parsing: 1.02 ms
- Compiling: 3.53 ms
- Evaluating: 21157.98 ms
- Printing: 144.41 ms
- Total Time: 21306.94 ms
Later Query (suggested by you) "transaction/*[name() ne 'traInfo']"
Loop (executed with java api) takes 0.5 secs
Query Info :
Timing:
- Parsing: 1.0 ms
- Compiling: 3.46 ms
- Evaluating: 15469.8 ms
- Printing: 56.87 ms
- Total Time: 15531.14 ms
Query will return around 94 lacks items.
So, I was wondering apart from query change, is there any baseX tuning or configuration changes should I do to further improve time from 13 secs.
meanwhile I tried to run the same query on a high end machine ( 64 GB RAM, 8 cores Linux machine).
BaseX was started with -Xmx32g.
I didn't find any improvement in execution time.
I am also attaching -Xrunhprof:cpu for
former query = java.hprof_former_query.txt
later query = java.hprof_later_query.txt
Hope above information suffices you.
Thanks