######
# Q1 #
######
xmark001

real    0m0.024s
user    0m0.000s
sys     0m0.000s

real    0m0.015s
user    0m0.000s
sys     0m0.000s

real    0m0.015s
user    0m0.000s
sys     0m0.000s

*avg(average)
0.018s

--
xmark005

real    0m0.051s
user    0m0.010s
sys     0m0.000s

real    0m0.024s
user    0m0.000s
sys     0m0.000s

real    0m0.024s
user    0m0.000s
sys     0m0.000s

*avg
0.033s

--
xmark01

real    0m0.093s
user    0m0.010s
sys     0m0.000s

real    0m0.036s
user    0m0.000s
sys     0m0.000s

real    0m0.036s
user    0m0.010s
sys     0m0.000s

*avg
0.055s

######
# Q2 #
######
xmark001

real    0m0.786s
user    0m0.000s
sys     0m0.000s

real    0m0.112s
user    0m0.000s
sys     0m0.000s

real    0m0.105s
user    0m0.000s
sys     0m0.000s

*avg
0.328s

--
xmark005

real    0m0.432s
user    0m0.000s
sys     0m0.000s

real    0m0.375s
user    0m0.000s
sys     0m0.000s

real    0m0.382s
user    0m0.000s
sys     0m0.000s

*avg
0.396s

--
xmark01

real    0m1.078s
user    0m0.000s
sys     0m0.000s

real    0m1.113s
user    0m0.010s
sys     0m0.000s

real    0m1.169s
user    0m0.000s
sys     0m0.000s

*avg
1.12s

######
# Q3 #
######
xmark001

real    0m0.065s
user    0m0.000s
sys     0m0.000s

real    0m0.026s
user    0m0.000s
sys     0m0.000s

real    0m0.026s
user    0m0.000s
sys     0m0.000s

*avg
0.039s

--
xmark005

real    0m0.059s
user    0m0.000s
sys     0m0.000s

real    0m0.060s
user    0m0.000s
sys     0m0.010s

real    0m0.058s
user    0m0.000s
sys     0m0.000s

*avg
0.059s

--
xmark01

real    0m0.232s
user    0m0.000s
sys     0m0.000s

real    0m0.163s
user    0m0.010s
sys     0m0.000s

real    0m0.163s
user    0m0.010s
sys     0m0.000s

*avg
0.186s

######
# Q4 #
######
xmark001

real    0m0.442s
user    0m0.000s
sys     0m0.000s

real    0m0.159s
user    0m0.000s
sys     0m0.000s

real    0m0.155s
user    0m0.000s
sys     0m0.000s

*avg
0.252s

--
xmark005

real    0m2.770s
user    0m0.000s
sys     0m0.010s

real    0m2.705s
user    0m0.000s
sys     0m0.000s

real    0m2.744s
user    0m0.000s
sys     0m0.000s

*avg
2.740s

--
xmark01

real    0m11.129s
user    0m0.010s
sys     0m0.000s

real    0m11.013s
user    0m0.000s
sys     0m0.000s

real    0m11.037s
user    0m0.000s
sys     0m0.000s

*avg
11.060s

SELECT
    xn4.docid,
    xn4.id
FROM
    xml_path xp3,
    xml_node xn3,
    xml_path p1_xp4,
    xml_node p1_xn4,
    xml_node xn4,
    xml_tag xt4
WHERE
    xp3.pathexp = '#/site#/closed_auctions#/closed_auction' AND
    xn3.pathid = xp3.pathid AND
    p1_xp4.pathexp = (xp3.pathexp || '#/price#/text()') AND
    p1_xn4.pathid = p1_xp4.pathid AND
    _int_flagment(p1_xn4.dewey,xn3.dewey) AND
    vchar2real(p1_xn4.value) >= 40.0 AND
    xn4.parent = xn3.id AND
    xn4.kind > 0 AND
    xn4.kind < 5 AND
    xt4.tagid = xn4.tagid AND
    xt4.name = 'price'

QUERY PLAN
Nested Loop  (cost=1.93..4705.32 rows=347 width=298) (actual time=24.40..11940.68 rows=670 loops=1)
  Join Filter: _int_flagment("inner".dewey, "outer".dewey)
  ->  Hash Join  (cost=1.93..2315.91 rows=6 width=239) (actual time=0.78..344.41 rows=975 loops=1)
        Hash Cond: ("outer".tagid = "inner".tagid)
        ->  Nested Loop  (cost=0.00..2311.59 rows=463 width=235) (actual time=0.48..305.46 rows=16575 loops=1)
              ->  Nested Loop  (cost=0.00..395.86 rows=500 width=219) (actual time=0.34..13.94 rows=975 loops=1)
                    ->  Nested Loop  (cost=0.00..11.07 rows=1 width=156) (actual time=0.30..0.31 rows=1 loops=1)
                          ->  Index Scan using xml_path_exp on xml_path xp3  (cost=0.00..5.53 rows=1 width=78) (actual time=0.20..0.21 rows=1 loops=1)
                                Index Cond: (pathexp = '#/site#/closed_auctions#/closed_auction'::character varying)
                          ->  Index Scan using xml_path_exp on xml_path p1_xp4  (cost=0.00..5.53 rows=1 width=78) (actual time=0.07..0.08 rows=1 loops=1)
                                Index Cond: (p1_xp4.pathexp = ("outer".pathexp || '#/price#/text()'::character varying))
                    ->  Index Scan using xml_node_pathid on xml_node xn3  (cost=0.00..371.91 rows=1030 width=63) (actual time=0.03..7.24 rows=975 loops=1)
                          Index Cond: (xn3.pathid = "outer".pathid)
              ->  Index Scan using xml_node_parent on xml_node xn4  (cost=0.00..3.63 rows=16 width=16) (actual time=0.03..0.17 rows=17 loops=975)
                    Index Cond: (xn4.parent = "outer".id)
                    Filter: ((kind > 0) AND (kind < 5))
        ->  Hash  (cost=1.93..1.93 rows=1 width=4) (actual time=0.23..0.23 rows=0 loops=1)
              ->  Seq Scan on xml_tag xt4  (cost=0.00..1.93 rows=1 width=4) (actual time=0.22..0.22 rows=1 loops=1)
                    Filter: (name = 'price'::character varying)
  ->  Index Scan using xml_node_pathid on xml_node p1_xn4  (cost=0.00..377.06 rows=343 width=59) (actual time=0.03..10.17 rows=670 loops=975)
        Index Cond: (p1_xn4.pathid = "outer".pathid)
        Filter: (vchar2real(value) >= 40::double precision)
Total runtime: 11942.17 msec

975NestedLoop.
Optimize...̤ΤȤɾФäȽξ
ܤϤʤΤ...

⤽Costactual timeγ⤤(?
ȥ١ץƥޥθ³ʤΤ׾̩ˤȤ褦
塼˥󥰤٤...

http://www.postgresql.jp/document/pg732doc/admin/routine-vacuuming.html#VACUUM-FOR-STATISTICS
#<OFFTOPIC>___Ū___٤׾äƤȤФޤ</OFFTOPIC>

#PostgreSQL 7.2 顢ANALYZE ϡƤιԤɤΤǤϤʤ
#ơ֥뤫˹ԤФ׽Ԥʤ褦ˤʤäᡢ
#ʥơ֥ФƤ⤫ʤ®˽褦ˤʤޤ
#ǤΤǡˤ˥ǡ١ΤФƼ¹Ԥ餯ʤñˤʤޤ
#
#    Tip: ñ̤Ǥ ANALYZE ¹٤Ĵ˼ŪȤϤΤǤϤޤ󤬡
#    	ñ̤Ĵ ANALYZE ǽפ׾ξܺ٥٥ǹԤʤȤϲͤ礬ޤ 
#    	WHERE ɤѤ졢ǡʬۤε§ۤȤɤʤϡ
#    	¾٤ǡٿʬۤɬפˤʤǤ礦
#    	ALTER TABLE SET STATISTICS 򻲾ȤƲ 

dewey_Ūˤ_դǤ뤬, IndexŽƤʤȤˤ꤬롣
deweyindexŽä˸̤ˤ⵿..
ŪparentpathΥǥåȤäƥե륿󥰤
ancestor, following, precedingǤϤΤ褦ʥե륿ʤ
礻ΨΤǥ󥷥diskreadۤ
ᤤ礬¿äˡǡǥȤʤ륱ˤơ

(ԲĤڻ뤹)Τ褦ʥץϥץƥޥǤ
ǥåưפƤΤ̵񤫤⤷ʤ(륳Ȥ˸礦?

http://www.postgresql.jp/document/pg732doc/reference/sql-analyze.html

deweyΤ褦ͤХ餱Ƥ硢ͤȼ褦ˤۤ褵..
ǥեȤо10ϺΥǤϡʤ..

Postgresϳĥ桼ؿΥȻФøʵ
(øʷи§

######
# Q5 #
######
xmark001

real    0m0.044s
user    0m0.010s
sys     0m0.000s

real    0m0.027s
user    0m0.000s
sys     0m0.000s

real    0m0.027s
user    0m0.000s
sys     0m0.000s

*avg
0.033s

--
xmark005

real    0m0.099s
user    0m0.000s
sys     0m0.000s

real    0m0.045s
user    0m0.000s
sys     0m0.000s

real    0m0.045s
user    0m0.000s
sys     0m0.000s

*avg
0.063s

--
xmark01

real    0m0.173s
user    0m0.020s
sys     0m0.000s

real    0m0.176s
user    0m0.020s
sys     0m0.000s

real    0m0.177s
user    0m0.020s
sys     0m0.000s

*avg
0.175s

######
# Q6 #
######
xmark001

real    0m0.057s
user    0m0.000s
sys     0m0.000s

real    0m0.029s
user    0m0.000s
sys     0m0.000s

real    0m0.029s
user    0m0.000s
sys     0m0.000s

*avg
0.038s

--
xmark005

real    0m0.070s
user    0m0.000s
sys     0m0.000s

real    0m0.040s
user    0m0.000s
sys     0m0.010s

real    0m0.040s
user    0m0.010s
sys     0m0.000s

*avg
0.050s

--
xmark01

real    0m0.121s
user    0m0.010s
sys     0m0.000s

real    0m0.053s
user    0m0.010s
sys     0m0.000s

real    0m0.052s
user    0m0.010s
sys     0m0.000s

*avg
0.075s

######
# Q7 #
######
xmark001

real    0m0.186s
user    0m0.000s
sys     0m0.000s

real    0m0.187s
user    0m0.000s
sys     0m0.000s

real    0m0.185s
user    0m0.000s
sys     0m0.000s

*avg
0.186s

--
xmark005

real    0m5.632s
user    0m0.000s
sys     0m0.000s

real    0m5.574s
user    0m0.000s
sys     0m0.000s

real    0m5.592s
user    0m0.000s
sys     0m0.000s

*avg
5.599s

--
xmark01

real    0m24.391s
user    0m0.010s
sys     0m0.000s

real    0m26.958s
user    0m0.000s
sys     0m0.000s

real    0m24.642s
user    0m0.010s
sys     0m0.000s

*avg
25.340s

SELECT DISTINCT
    xn3.docid,
    xn3.id
FROM
    xml_path xp2,
    xml_node xn2,
    xml_node xn3
WHERE
    xp2.pathexp LIKE '#%/closed_auction' AND
    xn2.pathid = xp2.pathid AND
    xn3.parent = xn2.parent AND
    xn2.dewey < xn3.dewey AND
    xn3.kind > 0 AND
    xn3.kind < 5 AND
    xn3.kind = '1'

QUERY PLAN
Unique  (cost=2757.40..2812.13 rows=730 width=134) (actual time=28169.63..29337.02 rows=974 loops=1)
  ->  Sort  (cost=2757.40..2775.64 rows=7297 width=134) (actual time=28169.62..28819.71 rows=474825 loops=1)
        Sort Key: xn3.docid, xn3.id
        ->  Nested Loop  (cost=0.00..2289.17 rows=7297 width=134) (actual time=16.54..16944.41 rows=474825 loops=1)
              Join Filter: ("outer".dewey < "inner".dewey)
              ->  Nested Loop  (cost=0.00..412.56 rows=500 width=67) (actual time=14.49..34.20 rows=975 loops=1)
                    ->  Seq Scan on xml_path xp2  (cost=0.00..27.77 rows=1 width=4) (actual time=14.25..16.26 rows=1 loops=1)
                          Filter: (pathexp ~~ '#%/closed_auction'::text)
                    ->  Index Scan using xml_node_pathid on xml_node xn2  (cost=0.00..371.91 rows=1030 width=63) (actual time=0.23..11.30 rows=975 loops=1)
                          Index Cond: (xn2.pathid = "outer".pathid)
              ->  Index Scan using xml_node_parent on xml_node xn3  (cost=0.00..3.67 rows=5 width=67) (actual time=0.04..14.20 rows=975 loops=975)
                    Index Cond: (xn3.parent = "outer".parent)
                    Filter: ((kind > 0) AND (kind < 5) AND (kind = 1::smallint))
Total runtime: 34525.41 msec

474,825Υ(distinct)˻֤äƤ롣
PostgresΥѥХåե16MBƤƤʤͳΤҤȤġ
ȼΤŤʤΤפʤʬ⤢
(PostgresΥȤΥ르ꥺब褯ʤ?

1). docididindexŽ¿ʤ뤫Τʤͤȹޤʤ
2). 뤤, ȥХåե¿Ƥ
3). distinctȤȼΤͤʤ -> , XPath1.0λͤǤϥΡɤνʣϤʤ
	(XPath2.0ȥ󥹥١ǽʣ. ͤ㤦...

Sort Memory Size

When sorting large tables or results, PostgreSQL will sort them in parts, 
placing intermediate results in temporary files. 
These files are then merged and resorted until all rows are sorted. 
Increasing the batch size creates fewer temporary files and often allows faster sorting. 
However, if the sort batches are too large, they cause pageins 
because parts of the sort batch get paged out to swap during sorting. 
In these cases, it is much faster to use smaller sort batches and more temporary files,
so again, swap pageins determine when too much memory has been allocated. 
Keep in mind that this parameter is used for every backend performing a sort, 
either for ORDER BY, CREATE INDEX or for a merge join. 
Several simultaneous sorts will use several times this amount of memory.

http://www.linuxjournal.com/article.php?sid=4791

                                                                         QUERY PLAN                                                                         
------------------------------------------------------------------------------------------------------------------------------------------------------------
 Unique  (cost=2086.73..2123.88 rows=495 width=134) (actual time=29218.24..30387.44 rows=974 loops=1)
   ->  Sort  (cost=2086.73..2099.12 rows=4952 width=134) (actual time=29218.23..29869.60 rows=474825 loops=1)
         Sort Key: xn3.docid, xn3.id
         ->  Nested Loop  (cost=0.00..1782.81 rows=4952 width=134) (actual time=13.80..17077.58 rows=474825 loops=1)
               Join Filter: ("outer".dewey < "inner".dewey)
               ->  Nested Loop  (cost=0.00..224.59 rows=491 width=67) (actual time=13.44..33.27 rows=975 loops=1)
                     ->  Seq Scan on xml_path xp2  (cost=0.00..27.77 rows=1 width=4) (actual time=13.36..15.35 rows=1 loops=1)
                           Filter: (pathexp ~~ '#%/closed_auction'::text)
                     ->  Index Scan using xml_node_pathid on xml_node xn2  (cost=0.00..190.54 rows=502 width=63) (actual time=0.06..11.34 rows=975 loops=1)
                           Index Cond: (xn2.pathid = "outer".pathid)
               ->  Index Scan using xml_node_parent on xml_node xn3  (cost=0.00..3.15 rows=1 width=67) (actual time=0.04..14.29 rows=975 loops=975)
                     Index Cond: (xn3.parent = "outer".parent)
                     Filter: ((kind > 0) AND (kind < 5) AND (kind = 1::smallint))
 Total runtime: 30395.79 msec
(14 rows)



######
# Q8 #
######
xmark001

real    0m0.122s
user    0m0.000s
sys     0m0.000s

real    0m0.036s
user    0m0.000s
sys     0m0.000s

real    0m0.036s
user    0m0.000s
sys     0m0.000s

*avg
0.065s

--
xmark005

real    0m0.130s
user    0m0.000s
sys     0m0.000s

real    0m0.077s
user    0m0.000s
sys     0m0.000s

real    0m0.076s
user    0m0.000s
sys     0m0.000s

*avg
0.094s

--
xmark01

real    0m0.226s
user    0m0.010s
sys     0m0.000s

real    0m0.227s
user    0m0.000s
sys     0m0.000s

real    0m0.227s
user    0m0.000s
sys     0m0.000s

*avg
0.227s
