[xquery-talk] get highest number

Michael Kay mike at saxonica.com
Sat May 17 16:12:37 PDT 2008


Performance in a database is very dependent on how many pages you read from
disk. If there's an index that contains the node identifiers for all the
attributes named id, and that index occupies one page, then you can evaluate
//@id with one page access. But to evaluate max(//@id) you need to
dereference those node identifiers, which may mean accessing one page for
each separate id attribute.

Michael Kay
http://www.saxonica.com/ 

> -----Original Message-----
> From: Andrew Welch [mailto:andrew.j.welch at gmail.com] 
> Sent: 17 May 2008 10:35
> To: Michael Kay
> Cc: gonzberg at gmx.de; Wolfgang; talk at x-query.com
> Subject: Re: [xquery-talk] get highest number
> 
> >> > If Gonzberg is using eXist (I remember other posts on the 
> >> > corresponding lists), I can explain the difference:
> >> evaluating //@id is entirely index-based (as John already 
> suspected).
> >> Compared to this,
> >> > max(//@id) requires access to the actual attribute nodes, which 
> >> > generates a lot more IO.
> >
> > Thanks for the info. Obvious, when you think about it.
> 
> Not to me - can someone explain this a little more for me...
> 
> If //@id returns a sequence that's stored as atomics, why is
> max(//@id) any different to max(1 to 100000) ?
> 
> The XSLT equivalent (that my mind works in is):
> 
> <xsl:variable name="ids" select="//@id" as="xs:integer+"/>
> 
> <xsl:sequence select="max($ids)"/>
> 
> What am I missing?
> 
> --
> Andrew Welch
> http://andrewjwelch.com
> Kernow: http://kernowforsaxon.sf.net/



More information about the talk mailing list