saxon:unindexed

A pseudo-function that tells the optimizer to avoid indexing a filter expression.

unindexed($input as item()*) ➔ xs:string

Arguments

 

$input

item()*

The expression to be evaluated without indexing

Result

xs:string

Namespace

http://saxon.sf.net/

Notes on the Saxon implementation

Available since Saxon 11.

Details

The function returns the value of its argument unchanged.

The reason for calling this function is that it signals to the optimizer that the argument expression (which will typically be a filter expression) should not result in construction of an index.

For example, Saxon would normally build an index to evaluate an expression such as //person[@ssn=$ssn]. But there are cases where this is not the best strategy, for example:

  • If the expression will only be evaluated once.
  • If impure extension functions are used to modify the data between evaluations.
  • If the set of nodes selected by //person is small.
  • If most of the nodes selected by //person have the same value for @ssn.

Writing saxon:unindexed(//person[@ssn=$ssn]) delivers the same result, but using a serial search of the data.