Обсуждение: Poor performance in inet << cidr join
Hi SQLers, in 8.0, joining 2 tables: CREATE TABLE network ( id cidr PRIMARY KEY , -- 'PK, ,IPv4/6 Network address' ... ) CREATE TABLE address ( id inet PRIMARY KEY , -- 'PK of IPv4/6 host address' ... ) as: SELECT COUNT(*) FROM address A WHERE NOT EXISTS ( SELECT A.id FROM network N WHERE A.id << N.id ); shows this query plan: Aggregate (cost=2264.51..2264.51 rows=1 width=0) -> Seq Scan on address a (cost=0.00..2225.86 rows=15459 width=0) Filter: (NOT (subplan)) SubPlan -> Seq Scan on network n (cost=0.00..107.95 rows=2038 width=0) Filter: ($0 << (id)::inet) The planner does not use the pk-indices. Poking around, I could not find an operator class, which supports the containment ('<<') operator. Is my conclusion correct? How can the functionality be extended? Is there any implementation available? Thanks, Axel Axel Rau, Frankfurt, Germany +49-69-951418-0
Am 31.10.2005 um 19:53 schrieb Axel Rau: > The planner does not use the pk-indices. Poking around, > I could not find an operator class, which supports the containment > ('<<') operator. > Is my conclusion correct? > How can the functionality be extended? > Is there any implementation available? rtree_inet from John Hansen does the trick: http://archives.postgresql.org/pgsql-hackers/2005-01/msg01038.php First test shows query time of 85 instead of 2745 seconds: QUERY PLAN ------------------------------------------------------------------------ ------------------------- Aggregate (cost=1768557.75..1768557.75 rows=1 width=0) -> Seq Scan on event e (cost=0.00..1768040.83 rows=206769 width=0) Filter: (NOT (subplan)) SubPlan -> Index Scan using network_id_rtree on network n (cost=0.00..21.28 rows=5 width=0) Index Cond: ($0 &<< (id)::inet) Question: Can rtree_inet be included in the core? Axel Axel Rau, Frankfurt, Germany +49-69-951418-0
Axel Rau <Axel.Rau@Chaos1.DE> writes: > Question: Can rtree_inet be included in the core? No, because rtree is going away in 8.2. Feel like converting that code to be a GIST opclass, instead? regards, tom lane
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am 03.11.2005 um 00:22 schrieb Tom Lane: > Axel Rau <Axel.Rau@Chaos1.DE> writes: >> Question: Can rtree_inet be included in the core? > > No, because rtree is going away in 8.2. Feel like converting that > code to be a GIST opclass, instead? Perhaps. It would be a big step for me, since I started with pg 3 month ago. As starting points, I found - - chapter 48 in the 8.0 manual - - rtree_gist in 8.0 contrib - - btree_gist in 8.1 contrib Any more? Axel Axel Rau, Frankfurt, Germany +49-69-951418-0 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (Darwin) iQEVAwUBQ2oIlMFz9+6bacTRAQIwHQgAgOKK5rxY4aTrEStJeljORZwUWQre66ZD ZoD6HYcVxJepRC9lEbakxLmdokHtaMp1rqWziiv7idlDqApc6deVlo7ESozFC2jZ Yb/hVBIxmaBuHFj2n/AbYwGPR18g1SLODhyOj6/QlciKLw0apAVLUb0iHCfS7ie0 qSaCh/oARM8066SpMtdBX5oKLRgcgXYYtK9UNmX0njLqyDmCd9WZRrOwnLRRzptZ k5R1iMDrksV/Hifx9RcaGNRkQ4JZ15rf3OCLHgwMMwrpfLB0jMcBN8o1YEpZimJc Ffc5ChGlTfb4ADcCMGl3mBgBFNRoUZqMKrFakvEHJY65jz8ng3bl3w== =Hco5 -----END PGP SIGNATURE-----