【问题标题】:Oracle Spatial Functions performing slowOracle 空间函数执行缓慢
【发布时间】:2017-08-12 04:49:13
【问题描述】:

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

我执行了一个查询来检查 这 800k 点中有多少位于距离特定(经度、纬度)(指定为 aa.bbbbbb、cc.dddddd)坐标 1000 米范围内,如下所示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 分钟,我希望能更快地执行它。为什么会这样?有什么方法可以让查询运行得更快吗?还是我做错了什么?请帮忙。谢谢。

【问题讨论】:

    标签: database oracle oracle11g oracle-spatial


    【解决方案1】:

    进行此类查询的正确方法是使用使用空间索引的 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';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多