|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] get highest numberMichael Kay mike at saxonica.comSat 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:http://x-query.com/mailman/listinfo/talk] > Sent: 17 May 2008 10:35 > To: Michael Kay > Cc: http://x-query.com/mailman/listinfo/talk; Wolfgang; http://x-query.com/mailman/listinfo/talk > Subject: Re: 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/
|
Purchase Stylus Studio Online Today!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






