These tips are great. I'm working with XQuery for over a year and I'm learning things every day. It would also be nice to have a wiki page with performance tips, as these things are hard to find ;) Have a nice weekend, George
As I overlooked in your last example, you did not use 'order by'. Without sorting, only the number of requested results will be created, no matter if you use the GUI or work on command-line. The most prominent example of this is the following query (which would be extremely slow and memory consuming otherwise):
(1 to 1000000000000000)[1]
If you use 'order by', it’s always recommendable to only return the minimum set of required of information, and create the full result in the subsequent step:
for $result in ( for $y in ...lots of stuff... order by ... return $y )[position() = 1 to 100] return <parent><child>{ $result }</child></parent>
One more trick: You can move your future result in a function and evaluate it afterwards:
for $func in ( for $i in 1 to 100000 order by $i descending return function() { <x>{ $i }</x> } )[position() = 1 to 5] return $func()
Hope this helps, Christian