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