From: Chris Marasti-G. <cg...@rj...> - 2005-12-22 14:09:04
|
=20 > -----Original Message----- > From: exi...@li...=20 > [mailto:exi...@li...] On Behalf Of=20 > Jan Tammen > Sent: Tuesday, December 20, 2005 12:49 PM > To: exi...@li... > Subject: [Exist-open] Performance-problems with "JOIN"-like query >=20 > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 >=20 > Bonjour! >=20 > I'm using the current eXist-snapshot (1.0-dev-20051203) for=20 > an university-project in which we try to compare native=20 > XML-DBMS to XML-enabled DBMS. >=20 > We stored the following 2 documents into eXist: >=20 > =3D=3D=3D=3D elements1.xml: > <?xml...?> > <Elements1> > ~ <Element1 id=3D"1"> > ~ <Foo>bar</Foo> > ~ <Element2 id=3D"20" /> > ~ </Element1> >=20 > ~ <Element1 id=3D"2"> > ~ ... > ~ </Element1> >=20 > ~ ... > ~ <!-- about 300 "Element1"-elements following --> </Elements1> = =3D=3D=3D=3D >=20 > =3D=3D=3D=3D elements2.xml: > <?xml...?> > <Elements2> > ~ ... >=20 > ~ <Element2id=3D"20"> > ~ <Foo>bar</Foo> > ~ </Element1> >=20 > ~ <Element2id=3D"21"> > ~ ... > ~ </Element1> >=20 > ~ ... > ~ <!-- about 200 "Element2"-elements following --> </Elements2> = =3D=3D=3D=3D >=20 > Now we want to "join" these documents together with a XQuery=20 > like this, which need a rather long time to execute (about 10=20 > secs, "normal" > queries are way faster): >=20 > for $e1 in doc("/path/to/elements1.xml")/Elements1/Element1, > ~ $e2 in doc("/paht/to/elements2.xml")/Elements2/Element2 > where $e1/Element2/@id eq $e2/@id > return > <Result> > ~ {$w} > ~ {$l} > </Result> >=20 eXist and "where" expressions are not the quickest pair... You are also using an o(n^2) approach at looping the elements, so you could increase performance by an order of magnitude with something like this: let $e1 :=3D doc("/path/to/elements1.xml")/Elements1/Element1 for $e2 in doc("/paht/to/elements2.xml")/Elements2/Element2 where $e1/Element2/@id eq $e2/@id return <Result> {$w} {$l} </Result> Now, factor out the where clause into a predicate: let $e1 :=3D doc("/path/to/elements1.xml")/Elements1/Element1 for $e2 in doc("/paht/to/elements2.xml")/Elements2/Element2[@id =3D $e1/Element2/@id] return <Result> {$w} {$l} </Result> Try that out and see how it goes (especially with the range index configured) > I know that eXist (or native XML-DBMS in general) are not=20 > supposed to handle these kind of queries on "relational=20 > data", but maybe there are some possiblities to improve this=20 > query's performance... >=20 > Thanks for hints in advance, > Jan Tammen. > -----BEGIN PGP SIGNATURE----- >=20 > iD8DBQFDqEQBP585L15bj7URAmqPAJ9YrAUNluzWygTRjCGLjMF7sgnubACfVn6R > 9xHNXXwV7ePWSET3NrtPBeY=3D > =3DIXox > -----END PGP SIGNATURE----- >=20 >=20 > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep=20 > through log files for problems? Stop! Download the new AJAX=20 > search engine that makes searching your log files as easy as=20 > surfing the web. DOWNLOAD SPLUNK! > http://ads.osdn.com/?ad_id=3D7637&alloc_id=3D16865&op=3Dclick > _______________________________________________ > Exist-open mailing list > Exi...@li... > https://lists.sourceforge.net/lists/listinfo/exist-open >=20 |