Oracle的SDO_包含未在联合表上使用空间索引吗?
我试图使用Oracle的sdo_contains spatial运算符,但当您在联合表上使用它时,它似乎不起作用。 下面的代码在2分钟内运行,但您必须为每个源表复制spatial运算符: 我想让它变得简单,所以我尝试先创建点,然后只使用sdo_包含的一次,但它运行了超过25分钟,因为它没有使用空间索引: 有没有一种方法可以对多个表的结果使用sdo_contains,而不必多次将其包含在select中?Oracle的SDO_包含未在联合表上使用空间索引吗?,oracle,union,spatial,Oracle,Union,Spatial,我试图使用Oracle的sdo_contains spatial运算符,但当您在联合表上使用它时,它似乎不起作用。 下面的代码在2分钟内运行,但您必须为每个源表复制spatial运算符: 我想让它变得简单,所以我尝试先创建点,然后只使用sdo_包含的一次,但它运行了超过25分钟,因为它没有使用空间索引: 有没有一种方法可以对多个表的结果使用sdo_contains,而不必多次将其包含在select中? Oracle:12.1.0.2看来,sdo_contains无法有效地从子选择中读取:如果我将
Oracle:12.1.0.2看来,sdo_contains无法有效地从子选择中读取:如果我将其中一个poi表放入子选择中,Oracle将不会对该部分使用空间索引:
SELECT -- works
x.code,
count(x.my_id) cnt
FROM (select
c.code,
t.my_id
from my_poi_table_1 t,my_shape c
WHERE SDO_contains(c.shape,
sdo_geometry(2001,null,SDO_POINT_type(t.latitude, t.longitude,null),null,null)
) = 'TRUE'
union all
select
c.code,
t.my_id
from my_poi_table_2 t,my_shape c
where SDO_contains(c.shape,
sdo_geometry(2001,null,SDO_POINT_type(t.lat, t.lng,null),null,null)
) = 'TRUE'
) x
group by x.code
SELECT -- does not work
c.code,
count(x.my_id) cnt
FROM my_shape c,
(select
my_id,
sdo_geometry(2001,null,SDO_POINT_type(latitude, longitude,null),null,null) point
from my_poi_table_1 t
union all
select
my_id2,
sdo_geometry(2001,null,SDO_POINT_type(lat, lng,null),null,null) point
from my_poi_table_2 t
) x
WHERE SDO_contains(c.shape,
x.point
) = 'TRUE'
group by c.code
SELECT -- does not work
x.code,
count(x.my_id) cnt
FROM (select --+ ordered index(c,INDEX_NAME)
c.code,
t.my_id
from my_shape c,(select t.*,rownum rn from my_poi_table_1 t) t
WHERE SDO_contains(c.shape,
sdo_geometry(2001,null,SDO_POINT_type(t.latitude, t.longitude,null),null,null)
) = 'TRUE'
union all
select
c.code,
t.my_id
from my_poi_table_2 t,my_shape c
where SDO_contains(c.shape,
sdo_geometry(2001,null,SDO_POINT_type(t.lat, t.lng,null),null,null)
) = 'TRUE'
) x
group by x.code