- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在客户端-服务器环境中使用 Oracle spatial 的 sdo_relate Operator 来查询两个表,每个表都有数千个几何对象。我在 where 子句中应用了一个条件,只将一个对象传递给所谓的查询窗口。
在 from 子句中使用 '/*+ ordered */' 提示和所需的表顺序(如 Oracle Spatial 引用中所述)我的性能很差:
SELECT /*+ ORDERED */ A.someAttr FROM Polygons A,lines B WHERE
B.id=someValue AND sdo_relate(B.geom,A.geom,
'mask=anyinteract') = 'TRUE'; --6 Min!
我认为这是解决方法,因为没有有序的提示,它需要 50 秒。 (还有待优化)无论如何,空间文档似乎很糟糕! http://docs.oracle.com/cd/B19306_01/appdev.102/b14255/sdo_operat.htm#i78531
谁有过这样的经历,期待你的解决方案。
最佳答案
关键是你的查询写错了。在所有空间运算符中,第一 列是您搜索的表中的列,第二 列是您的查询窗口。所以像这样重写你的查询:
SELECT A.someAttr
FROM Polygons A,lines B
WHERE B.id=someValue
AND sdo_relate(A.geom,B.geom,'mask=anyinteract') = 'TRUE';
或更简单:
SELECT A.someAttr
FROM Polygons A,lines B
WHERE B.id=someValue
AND sdo_anyinteract(A.geom,B.geom) = 'TRUE';
这将比您指定的 50 秒快得多。并且提示根本没有必要。
假设您想进行反向操作(= 搜索与给定 POLYGON 相交的所有 LINES),那么您可以这样写:
SELECT A.someAttr
FROM Polygons A,lines B
WHERE A.id=someValue
AND sdo_anyinteract(B.geom,A.geom) = 'TRUE';
换句话说,您需要对 SDO_ANYINTERACT 的参数进行排序,使第一个 是您搜索 的列的名称,而第二个 是您的搜索窗口。
from 子句中表的顺序并不重要,where 子句中谓词的顺序也不重要:数据库优化器将生成相同的查询计划。
在 where 子句中对表进行排序的唯一原因是,如果您使用/*+ order */提示让优化器按照表列出的顺序执行连接。但这在这里是不必要的(甚至可能产生负面影响)。
简单的规则是:不要使用任何提示 - 除非你知道你有问题并且你知道使用一些特定的提示可以解决问题。永远不要仅仅因为您认为有必要就使用提示。优化器足够聪明,可以生成正确的计划,并且仅在极少数情况下才会使用提示。
关于sql - 在 oracle spatial 10g 中使用 sdo_relate 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23568348/
最初的问题是,我试图找出集合中的一个点是否在给定的多边形内部。我没有得到任何结果,所以我将其简化为最简单的情况,但仍然没有结果。 多边形几何形状如下(坐标中心周围的小正方形): geom1 := SD
我在客户端-服务器环境中使用 Oracle spatial 的 sdo_relate Operator 来查询两个表,每个表都有数千个几何对象。我在 where 子句中应用了一个条件,只将一个对象传递
下面的oracle空间查询有什么区别?这两个函数是否返回相同的结果?我对 MASK=CONTAINS 感到困惑 SDO_CONTAINS (col1_geometry,col2_geometry )=
我是一名优秀的程序员,十分优秀!