Oracle SDO_加入,需要多长时间?

Oracle SDO_加入,需要多长时间?,oracle,join,spatial,geography,oracle-spatial,Oracle,Join,Spatial,Geography,Oracle Spatial,我想使用SDO_JOIN-Operator自联接一个表。 该表具有以下结构: ID VARCHAR2(20) 形状SDO_几何体() 该表有25778行 以下SDO_JOIN语句需要90秒: SELECT w.id as id1, w2.id as id2 FROM TABLE(SDO_JOIN('nodesWays', 'SHAPE', 'nodesWays', 'SHAPE', 'mask=ANYINTERACT')) c, nodesWays w, nodesWays w2 WHERE c

我想使用SDO_JOIN-Operator自联接一个表。 该表具有以下结构: ID VARCHAR2(20)
形状SDO_几何体()

该表有25778行

以下SDO_JOIN语句需要90秒:

SELECT w.id as id1, w2.id as id2
FROM TABLE(SDO_JOIN('nodesWays', 'SHAPE', 'nodesWays', 'SHAPE', 'mask=ANYINTERACT')) c,
nodesWays w, nodesWays w2
WHERE c.rowid1 = w.rowid AND c.rowid2 = w2.rowid;
90秒是正常时间还是过高。我不知道什么时候是执行死刑的好时机


再见,Andre

SDO_JOIN设计用于将许多空间对象与其他对象匹配:这是一种“批量”操作,因此需要时间,需要匹配的对象越多,显然需要的时间就越长。它需要多长时间显然也取决于运行它的硬件类型。CPU容量是关键

关于您的查询,首先删除SDO_GEOM.RELATE调用。这是不必要的,因为它已经由主SDO_连接查询完成。此外,我认为没有理由使用这些提示。所以试试这个:

SELECT w.id as id1, w2.id as id2
FROM TABLE(SDO_JOIN('nodesWays', 'SHAPE', 'nodesWays', 'SHAPE', 'mask=ANYINTERACT')) c,
nodesWays w, nodesWays w2
WHERE c.rowid1 = w.rowid 
AND c.rowid2 = w2.rowid
and c.rowid1 < c.rowid2;
选择w.id作为id1,选择w2.id作为id2
从表(SDO_JOIN('nodesWays','SHAPE','nodesWays','SHAPE','mask=ANYINTERACT')c,
节点通道w,节点通道w2
其中c.rowid1=w.rowid
和c.rowid2=w2.rowid
c.rowid1
这需要多长时间

90秒是个好时间吗?50秒是个好时间吗?一根绳子有多长

真正的问题是:对于您的应用程序工作流来说,90秒或50秒是一个好时机吗?它是否满足您的业务需求?如果是这样,你已经准备好了。如果您希望更快地获得结果,请尝试在CPU能力更强的系统上运行,即更快的处理器


请注意,SDO_JOIN目前没有利用多核/多cpu服务器提供的并行性。您仍然可以使用并行性,但这需要重写查询并使语法更加复杂。然后再问自己一个问题:是否值得为更快的响应而付出努力?

鉴于您发布的解释计划,我怀疑您可能很难让它运行得更快,除非您使用更快的CPU在更好的硬件上运行。请注意,sdo_join在12c中的速度要快得多,空间_VECTOR_ACCELERATION=TRUE,因此如果可能,请尝试在该版本上运行。。。即使只是测试它的速度。

我只是想知道我是否正确实现了它。或者如果有优化的可能性,我会尝试你的建议,空间向量加速度=TRUE。