Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Spatial Performance

Status
Not open for further replies.

ChrisHunt

Programmer
Jul 12, 2002
4,056
0
0
GB
I'm building a system which stores Geographical data, and trying to use the spatial functions in the Oracle database. Amongst the tables there are:

blpu - one row per property in the county, each row has a spatial point object indicating its position. Has 480,000 rows.

lcc_boundary - one row per region in the county (parishes, wards, districts, etc.), each row has a spatial polygon indicating its boundary. Has 537 rows.

Now, if I want to determine which parish (say) a given property is in, I do this:
Code:
SELECT b.uprn,
       lb.name area
FROM   blpu b,
       osmm.lcc_boundary lb
WHERE  MDSYS.SDO_GEOM.RELATE(lb.geoloc,
                             'CONTAINS',
                             b.geometry,
                             0.005) = 'CONTAINS'
AND    lb.area_code = 'CPC'
AND    b.uprn = 100030723225
So far so good - it comes back with the right answer - but it takes 1 second to do so. If I changed the last line to bring back 100 properties, it takes about 100 seconds. Clearly performance is going to be extremely sluggish when doing real queries.

Is there anything I can do - e.g. indexes that can be built - that will speed up these spatial functions; or am I just going to have to "denormalise" the spatial data into a table that cross-references each row in blpu with the rows in lcc_boundaries that enclose it?

I find it hard to believe that Oracle would be selling a product that's so unusably slow.

-- Chris Hunt
Webmaster & Tragedian
Extra Connections Ltd
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top