加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle Spatial函数SDO_CS.Transform(value)结果非常慢

发布时间:2021-01-10 09:05:32 所属栏目:站长百科 来源:网络整理
导读:我有一个自定义视图,用于查询几何列中的空间数据并提取纬度/经度值.但是,检索过程非常慢,并且需要最多5到10分钟才能检索到视图数据. 这是我的观点: CREATE OR REPLACE FORCE VIEW PoleData( G3E_FID,X_COORD,Y_COORD,LATITUDE,LONGITUDE)AS SELECT P.g3e_fi

我有一个自定义视图,用于查询几何列中的空间数据并提取纬度/经度值.但是,检索过程非常慢,并且需要最多5到10分钟才能检索到视图数据.

这是我的观点:

CREATE OR REPLACE FORCE VIEW PoleData
(
   G3E_FID,X_COORD,Y_COORD,LATITUDE,LONGITUDE
)
AS
   SELECT P.g3e_fid,T2.X * 1000 AS x_coord,T2.Y * 1000 AS y_coord,T.Y AS latitude,T.X AS longitude
     FROM PolePoint P,TABLE (
             SDO_UTIL.GETVERTICES (SDO_CS.TRANSFORM (P.G3E_GEOMETRY,8265))) T,TABLE (SDO_UTIL.GETVERTICES (P.G3E_GEOMETRY)) T2
    WHERE P.ltt_id = 0
   UNION
   SELECT P.g3e_fid,T.X AS longitude
     FROM PoleDetailPoint P,TABLE (SDO_UTIL.GETVERTICES (P.G3E_GEOMETRY)) T2
    WHERE P.ltt_id = 0;

G3E_GEOMETRY列是SDO_GEOMETRY类型. PolePoint表有1,310,629行,而PoleDetailPoint有100行.此表中的数据每天更新,而视图用于报告目的.

我尝试使用status = cleanup参数重建空间索引.但这没有任何区别.

我们的版本是Oracle 11.2.0.3.

有关检索此类视图/数据的任何提示均表示赞赏.或者我可以使用任何其他空间函数来更快地实现这一目标?

解决方法

尝试使用UNION ALL而不是UNION:

SELECT P.g3e_fid,T.X AS longitude
  FROM PolePoint P,TABLE (
          SDO_UTIL.GETVERTICES (SDO_CS.TRANSFORM (P.G3E_GEOMETRY,TABLE (SDO_UTIL.GETVERTICES (P.G3E_GEOMETRY)) T2
 WHERE P.ltt_id = 0
UNION ALL
SELECT P.g3e_fid,T.X AS longitude
  FROM PoleDetailPoint P,TABLE (SDO_UTIL.GETVERTICES (P.G3E_GEOMETRY)) T2
 WHERE P.ltt_id = 0;

性能下降的另一个潜在来源是你直接在P.G3E_GEOMETRY上使用两个SDO_UTIL.GET_VERTICES调用而另一个在P.G3E_GEOMETRY的变换上你将基本上有两个顶点列表的叉积的事实,所以例如,如果特定的P.G3E_GEOMETRY包含5个顶点,那么对于该5个顶点P.G3E_GEOMETRY,对于T和T2的25种可能组合中的每一种,最终将得到5 * 5条记录.我不知道顶点顺序是否由SDO_CS.TRANSFORM函数维护,但如果是,则可以通过在查询的每一半中添加和t1.id = t2.id谓词来提高性能:

SELECT P.g3e_fid,TABLE (SDO_UTIL.GETVERTICES (P.G3E_GEOMETRY)) T2
 WHERE P.ltt_id = 0
   AND T.ID = T2.ID
UNION ALL
SELECT P.g3e_fid,TABLE (SDO_UTIL.GETVERTICES (P.G3E_GEOMETRY)) T2
 WHERE P.ltt_id = 0
   AND T.ID = T2.ID;

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!