当前位置: 首页 > 知识库问答 >
问题:

Oracle Spatial Functions 执行缓慢

杜志
2023-03-14

我有一个包含800k个点的经度和纬度的表X。X中的SDO_GEOMETRY列是Y,它将点的坐标存储为点几何类型。我还为y创建了一个空间索引

我执行了一个查询,以检查这些800k中有多少位于距离特定(经度、纬度)(指定为aa.bbbbbb、cc.dddddd)坐标1000米以内,如下SQLPlus:
SELECT*From X x WHEREsdo_geom.sdo_distance(SDO_GEOMETRY(2001,8307,SDO_POINT_TYPE(aa.bbbbbb,cc.dddddd, NULL), NULL, NULL), x. Y,0.5)

我的疑问是关于查询的缓慢性能。时间大约需要8分钟,我希望能更快地执行它。为什么会这样呢?有什么方法可以让查询运行得更快?还是我做错了什么?请帮帮忙。谢谢你。


共有1个答案

计承德
2023-03-14

执行此类查询的正确方法是使用使用空间索引的 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';
 类似资料:
  • 我有一个使用Java Web Start部署的应用程序。当我进行单元测试时,我注意到一个小问题:每当我的应用程序使用Java Web Start运行时,一个特定的操作都需要很长时间才能执行。然而,当在本地运行时,速度相当快。 我所说的特定操作是读取一个大的(5k行)Excel文件来解析它。这是代码行: 为了解决这个问题,我添加了一种记录时间的方法: 这是输出: (本地) (Java Web Sta

  • 我有一些储藏室 I get with“/执行器/指标/缓存。get” 如何获取myCache和myOtherCache的命中和未命中值?

  • 我在sprint Boot2执行器中找不到缓存度量。我应该如何查询它们或激活或调试? org.springframework.boot:spring-boot-starter-acture:2.2.5.释放 http://localhost:8080/acturet/metrics/cache.calendar.size http://localhost:8080/acturet/metrics/

  • 本文向大家介绍php如何执行非缓冲查询API,包括了php如何执行非缓冲查询API的使用技巧和注意事项,需要的朋友参考一下 对于PHP的缓冲模式查询大家都知道,下面列举的例子是如何执行非缓冲查询API。 非缓冲查询方法一: mysqli 非缓冲查询方法二: pdo_mysql 非缓冲查询方法三: mysql 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我试图理解Java的关键字,关于在具有CPU缓存的多线程程序中写入易失性原子变量。 我已经阅读了一些教程和Java语言规范,特别是关于“订购前发生”的第17.4.5节。我的理解是,当一个线程将一个新值写入一个可变变量时,更新后的值必须对读取该变量的其他线程可见。对我来说,这些语义可以通过以下两种方式之一实现: > 线程可以在CPU缓存中缓存易失性变量,但对缓存中变量的写入必须立即刷新到主内存。换句

  • 本文向大家介绍PHP定时任务延缓执行的实现,包括了PHP定时任务延缓执行的实现的使用技巧和注意事项,需要的朋友参考一下