我有一个表X,其中包含800k点的经度和纬度。 X中的SDO_GEOMETRY列是Y,它将点的坐标存储为点几何类型。我还为Y创建了一个空间索引。
我执行了一项查询,检查距离特定(经度,纬度)(指定为aa.bbbbbb,cc.dddddd)坐标 1000米内的800k点中有多少点,如下所示: SQL Plus:
SELECT * FROM X x WHERE sdo_geom.sdo_distance(SDO_GEOMETRY(2001,8307,
SDO_POINT_TYPE(aa.bbbbbb,cc.dddddd,NULL),NULL,NULL),x.Y,0.5) < 1000
我怀疑查询的性能是否缓慢。花费的时间大约是8分钟,我希望能够更快地执行它。为什么会这样?有没有办法让查询运行得更快?或者我做错了什么?请帮忙。谢谢。
答案 0 :(得分:0)
执行此类查询的正确方法是使用使用空间索引的SDO_WITHIN_DISTANCE()运算符。如上所述,您计算表格中800000点的每一点与比较点之间的距离。
SELECT *
FROM X x
WHERE sdo_within_distance(
x.Y,
SDO_GEOMETRY(2001,8307,SDO_POINT_TYPE(aa.bbbbbb,cc.dddddd,NULL),NULL,NULL),
'distance=1000 unit=m'
) = 'TRUE';