1
我正在嘗試使用Oracle的sdo_contains空間運算符,但它似乎並沒有真正起作用,當您在聯合表上使用它時。 下面的代碼在2分鐘運行,但你必須複製的空間算爲每個源表:
Oracle的SDO_CONTAINS在聯合表上不使用空間索引?
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
我想讓它簡單,所以我想先創建點,然後只有一次使用就可以了SDO_CONTAINS,但它的運行更多的則25分鐘,因爲它不使用空間索引:
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
有一種使用多個表的結果SDO_CONTAINS不必包括它的方式在選擇幾次?
甲骨文:12.1.0.2