我在两台不同的 Oracle 服务器上有相同的数据库,一台是 11.2.0.1.0,另一台是 11.2.0.4.0。我在两个数据库中都有相同的 2 个几何表,并在两个服务器上运行以下查询。在 11.2.0.1.0 版本的 Oracle 上运行时,查询会运行几分钟并得到结果,在 11.2.0.4.0 上运行时相同的查询会运行大约 3 秒并且没有返回任何结果。
BLPUs 表包含 3600 万个点,PD_B2 表包含一个多边形。我试图找到落在多边形中的所有点。其他空间查询确实返回行,但需要数小时和数小时,而 Oracle Spatial 文档中建议的表连接需要 15 分钟才能返回所有点。
SELECT /*+ ordered */ a.uprn
FROM TABLE(SDO_JOIN('BLPUS', 'GEOLOC', 'PD_B2', 'GEOLOC','mask=ANYINTERACT')) c, blpus a, PD_B2 b
WHERE c.rowid1 = a.rowid
AND c.rowid2 = b.rowid;
下面的空间查询在 11.2.0.4 服务器上运行时返回 SDO_ROWIDSET()
select SDO_JOIN('BLPUS', 'GEOLOC', 'PD_B2', 'GEOLOC','mask=ANYINTERACT')
from dual;
select SDO_JOIN('BLPUS', 'GEOLOC', 'PD_B2', 'GEOLOC')
from dual;
在 11.2.0.1 服务器上,它们返回结果。
我发现一个小得多的点表将在 11.2.0.4 上工作,因此在使用 SDO_JOIN 时似乎对 11.2.0.4 有大小限制,而 11.2.0.1 似乎可以处理大表。
有谁知道这是为什么,或者在使用 SDO_JOIN 时表大小是否存在实际限制?