我有一个自定义视图,它从几何列中查询空间数据并提取纬度/经度值。但是,检索过程非常缓慢,需要5到10分钟才能检索视图数据。Oracle空间函数SDO_CS.Transform(值)结果非常慢
这是我的观点:
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,
T2.X * 1000 AS x_coord,
T2.Y * 1000 AS y_coord,
T.Y AS latitude,
T.X AS longitude
FROM PoleDetailPoint 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;
的G3E_GEOMETRY
列SDO_GEOMETRY
类型。 PolePoint表有1,310,629行,而PoleDetailPoint有100个。这些表中的数据每天更新,而视图用于报告目的。
我试着用status=cleanup
参数重建空间索引。但是这没有什么区别。
我们的版本是Oracle 11.2.0.3。
任何有关检索这种类型的意见/数据的提示赞赏。或者我可以使用任何其他空间函数来更快地实现这一目标?
为什么问题DOWNVOTED?能否提出评论意见的用户? – reggie
如果在PolePoint和PoleDetailPoint中没有重叠,则可以使用'UNION ALL'而不是'UNION',那么数据库不必将结果区分开来。 – Sentinel
你真的需要'联盟'吗?为什么你不使用'union all'? –