Oracle Spatial Functions执行缓慢

时间:2017-08-11 07:34:27

标签: database oracle oracle11g oracle-spatial

我有一个表X,其中包含800k点的经度和纬度。 X中的SDO_GEOMETRY列是Y,它将点的坐标存储为点几何类型。我还为Y创建了一个空间索引。

我执行了一项查询,检查距离特定(经度,纬度)(指定为aa.bbbbbb,cc.dddddd)坐标 1000米内的800k点中有多少点,如下所示: SQL Plus:
SELECT * FROM X x WHERE sdo_geom.sdo_distance(SDO_GEOMETRY(2001,8307, SDO_POINT_TYPE(aa.bbbbbb,cc.dddddd,NULL),NULL,NULL),x.Y,0.5) < 1000

我怀疑查询的性能是否缓慢。花费的时间大约是8分钟,我希望能够更快地执行它。为什么会这样?有没有办法让查询运行得更快?或者我做错了什么?请帮忙。谢谢。

1 个答案:

答案 0 :(得分:0)

执行此类查询的正确方法是使用使用空间索引的SDO_WITHIN_DISTANCE()运算符。如上所述,您计算表格中800000点的每一点与比较点之间的距离。

SELECT * 
FROM X x 
WHERE sdo_within_distance(
  x.Y,
  SDO_GEOMETRY(2001,8307,SDO_POINT_TYPE(aa.bbbbbb,cc.dddddd,NULL),NULL,NULL),
  'distance=1000 unit=m'
) = 'TRUE';