From: Chris T. <chr...@gm...> - 2013-12-10 03:02:01
|
Wolfgang, That is really great information to add to the doc on tuning eXist. Very clear. Thank you, Chris On Dec 10, 2013, at 2:16 AM, wol...@ex... wrote: >> Coding this way may bring you to case where optimizer will not understand you anymore…. > > The optimizer rewrites the expression at compile time, entirely based on static information. This works quite reliably for simple XPath expressions like //a[b = „c“ and d = „e“], but becomes more difficult if the expression involves further steps or a dependency on the dynamic context. We need to make sure the expression will always return the correct result - be it optimized or not. If anything is unclear, the optimizer will choose to rather not optimize. So if you think a certain filter expression using „and“ is not as fast as it should be, trying to optimize it by hand may be worth the effort. > > Concerning „or“: as Jonathan already mentioned, one approach to speed up an expression like //a[b = „c“ or d = „e“] is to split it into two and create join the results: //a[b = „c“] | //a[d = „e“]. This is not very elegant but quite effective if you have to process huge sets. For smaller sets its not worth the effort. > > I also often see people using „or“ to check for multiple values as in //a[b = „c“ or b = „d“]. However, this one can be shortened to //a[b = („c“, „d“)], which is fully optimized by eXist. > > Wolfgang |